0
我在SQL Server 2012数据库中有一个存储过程。我从PARENT表中删除,然后删除CHILD表行。 CHILD表有一个外键,指向父表中的主键。在存储过程中删除外键的顺序是否重要BEGIN END块
如果它全部在BEGIN END块内,我删除的顺序是否重要?我必须删除PARENT行之前的CHILD行吗?
我在SQL Server 2012数据库中有一个存储过程。我从PARENT表中删除,然后删除CHILD表行。 CHILD表有一个外键,指向父表中的主键。在存储过程中删除外键的顺序是否重要BEGIN END块
如果它全部在BEGIN END块内,我删除的顺序是否重要?我必须删除PARENT行之前的CHILD行吗?
尽管一些数据库系统支持可延迟的约束,但在SQL Server中,每个单独语句的末尾必须满足所有约束条件。因此,除非外键具有允许继续删除的ON DELETE
规范,否则您将无法删除父行,直到没有子行引用它们。
但是应该注意的是,BEGIN
...END
在这里没有任何影响。它们只是将几个陈述组合在一起的一种手段。即使在支持可延迟约束的数据库系统中,延期交易也按交易处理。交易以BEGIN TRANSACTION
和COMMIT [TRANSACTION]
(或ROLLBACK
)开始并完成,而不是BEGIN
... END
。