在c#中的三个表中更新列名

时间:2014-07-22 03:48:21

标签: c# sql

我有3个表mainCategory,subCategory和products.i想要更新主类别,但是当它应该更新其他剩余表中的受尊重数据时。在我的表格之后。

1. mainCategory 
mainCatId 
mainCatName

    2. subCategory 
subCatId 
mainCatId 
mainCatName 
subCatName

    3. products 
productId 
subCatId 
subCatName 
productName

更新必须像,当我更改mainCatName时,它会自动更改mainCatId,所以它应该在其他表中更改mainCaId和mainCatName,subCatId和subCatName,我已经尝试过查询但是它不能正常工作 查询是:

UPDATE    mainCategory
SET       mainCatId =, mainCatName =
FROM      mainCategory 
INNER JOIN
          subCategory ON mainCategory.mainCatId = subCategory.mainCatId 
CROSS JOIN
          products

,请帮助我!

1 个答案:

答案 0 :(得分:1)

您需要将表与外键链接,并在表定义中应用ON UPDATE CASCADE。

您不需要在subCategory表中包含mainCatName,因为subCategory表应该与具有mainCategory表的外键链接。

与products表中的subCatgoryName相同。

CREATE TABLE mainCategory (
    [mainCatId]   INT        NOT NULL,
    [mainCatName] NCHAR (10) NULL,
    PRIMARY KEY CLUSTERED ([mainCatId] ASC));

CREATE TABLE subCategory (
    [subCatId]   INT        NOT NULL,
    [mainCatId]  INT        NULL,
    [subCatName] NCHAR (10) NULL,
    PRIMARY KEY CLUSTERED ([subCatId] ASC),
    CONSTRAINT [FK_Table_ToTableMainCat] FOREIGN KEY ([mainCatId]) 
    REFERENCES [mainCategory] ([mainCatId]) ON UPDATE CASCADE);

CREATE TABLE products (
    [productId] INT NOT NULL PRIMARY KEY, 
    [subCatId] INT NULL, 
    [productName] NCHAR(10) NULL, 
    CONSTRAINT [FK_products_ToTableSubCategory] FOREIGN KEY (subCatId) 
    REFERENCES subCategory(subCatId) ON UPDATE CASCADE);

您可以简单地通过以下方式更新mainCatName:

 UPDATE mainCategory SET mainCatName='NEW NAME' WHERE mainCatId=SOMEID;

您的subCategory表通过FOREIGN KEY与mainCategory表链接。 您的产品表与带有FOREIGN KEY的子类别表链接。

如果您想获得特定 mainCategory 的产品:

SELECT productName, subCatName, mainCatName FROM products
JOIN subCategory ON products.subCatID = subCategory.subCatID
JOIN mainCategory ON subCategory.mainCatID = mainCategory.mainCatID
where mainCategory.mainCatID = 1;

如果您想获得特定子类别的产品:

SELECT productName, subCatName FROM products
JOIN subCategory ON products.subCatID = subCategory.subCatID
where subCategory.subCatID = 1;

如果要删除特定子类别中的产品,只需删除子类别记录,相应的产品将在级联中删除。

如果要更改subCategory的名称,只需更改subCategory表中的记录即可。

相关问题