在存储过程BEGIN END块内部时,使用外键删除的顺序是否重要



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

如果我的删除顺序都在BEGINEND块内,那么它是否重要?我必须删除"父母"行之前的"孩子"行吗?

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

然而,还应该注意的是,BEGIN。。。END在此没有影响。它们只是将几个语句组合在一起的一种方法。即使在支持可延迟约束的数据库系统中,延迟也是根据事务来处理的。事务是用BEGIN TRANSACTIONCOMMIT [TRANSACTION](或ROLLBACK)启动和完成的,而不是用BEGIN。。。END

最新更新