无法删除具有主/外键关系的表

时间:2014-04-28 18:44:15

标签: sql sql-server tsql relational-database

我在数据库中有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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

SQL处理这种非常正常的情况有三种方式:

ON DELETE CASCADE

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

ON DELETE SET NULL 

将FK字段设置为NULL

ON DELETE RESTRICT

这是你击中的dafault。

TSQL也可以做

ON DELETE SET DEFAULT

也可能有用。

没有一个解决方案(尤其不是CASCADE)!

你必须为每个FK决定什么是正确的条款!

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

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