【问题标题】:Delete query to delete data from multiple tables in sql server and c#删除查询从sql server和c#中的多个表中删除数据
【发布时间】:2014-07-21 16:19:10
【问题描述】:

我有三个表mainCategorysubCategoryproducts。我在网格视图中显示数据。我想从管理面板中删除主要类别,但到那时我还需要从子类别表和产品中删除数据,这些数据由主要类别表组成。

这些是表格中的列:

  1. mainCategory

    mainCatID (primary key)  
    mainCatName
    
  2. subCategory

    subCatId (primary key) 
    mainCatId
    subCatName 
    mainCatName
    
  3. products

    productId (primary key) 
    subCatId 
    subCatName  
    productName 
    productImage
    

SqlCommand 对象中写入什么SQL? Gridview 是使用函数后面的绑定表单代码.. 请帮帮我

【问题讨论】:

  • 我们可以帮助您处理您已经尝试过的 SQL 语句吗?
  • 我尝试了连接查询,但仍然无法正常工作,它只删除了 mainCategory 表中的数据,但没有删除剩余的两个表。查询如下.. DELETE FROM mainCategory FROM mainCategory INNER JOIN subCategory ON mainCategory.mainCatId = subCategory.mainCatId CROSS JOIN products where mainCategory.mainCatId ='" + lbldeleteID.Text + "'"

标签: c# asp.net sql sql-server


【解决方案1】:

像这样?将其作为三个单独的语句来做似乎是最简单的。

DELETE FROM Products WHERE SubCatId IN (SELECT SubCatID FROM SubCategory WHERE MainCatId = @mainCatId);
DELETE FROM SubCategory WHERE MainCatId = @mainCatId;
DELETE FROM MainCategory WHERE MainCatId = @mainCatId;

【讨论】:

  • 感谢您的支持..如何将其写入单个字符串以将其传递给 SqlCommand obj?
  • 用分号分隔语句应该可以让你按照我写的方式来做。
  • ok 是不是跟下面一样? string qry="DELETE FROM Products WHERE SubCatId IN (SELECT SubCatID FROM SubCatId WHERE MainCatId = @mainCatId); DELETE FROM SubCategory WHERE MainCatId = @mainCatId; DELETE FROM MainCategory WHERE MainCatId = @mainCatId; ";
  • 为什么不将这里发布的代码创建为存储过程?像这样通过sql处理起来很痛苦。
  • 肖恩的观点很好。这比像这样通过它要好。但是,是的,@user3828556,看起来不错。我的意思是,当然,您应该阅读它并确保它看起来正确。永远不要盲目地从互联网上运行代码。但我认为这是对的。
【解决方案2】:

这里有两种可能性。一,您对这三个表之间的关系启用了级联删除。如果是这样,那么它就像以下一样简单(假设没有循环/多个级联路径):

DELETE
FROM mainCategory WHERE mainCatID = @someId

如果您没有启用级联删除,那么这将是一个三步过程:

-- remove the products
DELETE a 
FROM products as a
JOIN subcategory as b 
ON a.subCatId = b.subCatId 
AND b.mainCatID = @someId

-- remove the subcategories
DELETE
FROM subcategory WHERE mainCatID = @someId

-- remove main categories
DELETE
FROM products WHERE mainCatID = @someId

【讨论】:

  • 你能告诉我如何进行级联删除吗?现在可以吗?
  • 假设您使用的是 SQL Server,转到 Management Studio (SSMS),右键单击表,选择设计,从上面的菜单中选择表设计器,选择关系,选择插入/更新规范,更改要级联的删除规则。
  • 不能更改删除规则它的禁用..不能更改其中的任何内容
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2014-03-03
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多