【问题标题】:Cannot delete tables with primary/foreign key relationships无法删除具有主/外键关系的表
【发布时间】:2014-04-29 02:56:38
【问题描述】:

我在数据库中有 30 个表,所有表都通过主键和外键关系相互关联。问题是当我尝试通过存储过程删除任何记录时,由于主/外键关系,它不会删除。我应该怎么做才能删除表?太多的表是相互关联的。

ALTER PROCEDURE [dbo].[DeleteRegions_SP]

    @RegionID smallint

AS
BEGIN

    Begin Try

     Delete from Regions where RegionID = @RegionID  
    End Try
    Begin Catch
     Select ERROR_MESSAGE() as ErrorMessage
    End Catch
END

【问题讨论】:

    标签: sql sql-server tsql relational-database


    【解决方案1】:

    SQL 可以通过三种方式处理这种非常正常的情况:

    ON DELETE CASCADE
    

    这将删除依赖于您要删除的记录的记录。

    ON DELETE SET NULL 
    

    这会将 FK 字段设置为 NULL

    ON DELETE RESTRICT
    

    这是你遇到的默认错误。

    TSQL也可以做一个

    ON DELETE SET DEFAULT
    

    这也可能有用。

    没有适合您的单一解决方案(尤其是 CASCADE)!

    您必须为每个 FK 决定什么是正确的子句!

    数据库设计是一门艺术..

    这个答案是关于删除记录而不是表;如果您真的想要删除表,您必须首先解除依赖于它们的 FK 关系。

    【讨论】:

      【解决方案2】:

      您必须先删除具有外键的表,然后才能删除具有主键的表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2017-10-24
        相关资源
        最近更新 更多