我在数据库中有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
答案 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关系。