在存储过程BEGIN END块中,具有外键的删除顺序是否重要

时间:2014-09-22 08:06:55

标签: sql-server

我在SQL Server 2012数据库中有一个存储过程。我从PARENT表中删除然后删除CHILD表行。 CHILD表有一个指向父表中主键的外键。

如果删除的顺序全部在BEGIN END块内,那么它的顺序是否重要?我必须在PARENT行之前删除CHILD行吗?

1 个答案:

答案 0 :(得分:1)

虽然某些数据库系统支持可延迟约束,但在SQL Server中,必须在每个单独语句的末尾满足所有约束。因此,除非外键具有允许删除的ON DELETE规范,否则在没有子行引用它们之前,您将无法删除父行。

但是,还应该注意,BEGIN...END在这里没有影响。它们只是将几个陈述组合在一起的一种手段。即使在支持可延迟约束的数据库系统中,也会根据事务来处理延迟。交易以BEGIN TRANSACTIONCOMMIT [TRANSACTION](或ROLLBACK)开始完成,而不是BEGIN ... END