【问题标题】:Deleting from 2 tables at the same time?同时从2个表中删除?
【发布时间】:2010-12-03 08:32:28
【问题描述】:

我正在使用 asp.net 和 sql server。我有 2 个表:类别和产品。在产品表中,我将 categoryId 设为 FK。我想做的是:当我从类别表中删除类别时,我希望该类别中的所有产品都将在产品表中删除。如何做到这一点(我更喜欢存储过程,但它不是强制性的)?

【问题讨论】:

  • 如果你得到了答案。请选择一个正确的答案。
  • 已提供的答案旁边有一个灰色勾勒勾号。然后,您选择与您认为最能回答您的问题的答案相对应的答案。

标签: asp.net sql-server stored-procedures


【解决方案1】:

您可以将该 FK 定义为使用 DELETES CASCADE。否则,您需要先删除该类别中的所有产品,然后再删除该类别。

【讨论】:

    【解决方案2】:

    如果可以调整架构,SQL Server 支持cascading deletes。使用这样的 FK 约束,您只需对类别进行一次删除即可获得此效果。不是每个人都喜欢级联删除,请注意!

    【讨论】:

      【解决方案3】:

      @categoryid 正在进入存储过程

      delete from products where  categoryid = @categoryid
      delete from categories where categoryid = @categoryid
      

      【讨论】:

        【解决方案4】:

        有很多方法可以做到这一点。我会在 SQL 中的外键约束上将删除设置为“级联”。让 SQL 为您管理,这是它擅长的。

        【讨论】:

          【解决方案5】:

          如果你想用存储过程来做

          delete from Categories where categoryId=@categoryId 
          delete from Products where categoryId = @categoryId
          

          如果这种情况总是发生。即,如果您从 Categories 表中删除某些内容,它应该从 Products 中删除。我的选择是 DELETE CASCADE.something like this

          ALTER TABLE dbo.Products   
          WITH CHECK ADD  CONSTRAINT FK_Products_Categories FOREIGN KEY([categoryId])
          REFERENCES dbo.Categories([categoryId])
          ON DELETE CASCADE
          

          所以当您从 Categories 表中删除时,它也会自动从 Products 表中删除

          例如:delete from dbo.Categories where categoryId =@categoryId

             no use of writing 
          
             delete from Products where categoryId = @categoryId
          

          【讨论】:

            【解决方案6】:

            您可以通过在数据库的“图表”部分(假设为 MS SQL 2005/2008)或屏幕顶部的关系按钮 (SQL 2000) 中的表之间创建关系来实现此目的。

            使用级联删除创建一对多关系后,查询可以很简单:

            delete from Categories where CategoryId = XX
            

            这将自动删除与该类别关联的所有产品。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-28
              • 2023-04-07
              相关资源
              最近更新 更多