我在SQL Server 2012数据库中有一个存储过程。我正在从PARENT表中删除,然后删除CHILD表的行。CHILD表有一个指向父表中主键的外键。
如果我的删除顺序都在BEGINEND块内,那么它是否重要?我必须删除"父母"行之前的"孩子"行吗?
尽管有些数据库系统支持可延迟约束,但在SQL Server中,每个语句的末尾都必须满足所有约束。因此,除非外键具有允许继续删除的ON DELETE
规范,否则在没有子行引用父行之前,您将无法删除父行。
然而,还应该注意的是,BEGIN
。。。END
在此没有影响。它们只是将几个语句组合在一起的一种方法。即使在支持可延迟约束的数据库系统中,延迟也是根据事务来处理的。事务是用BEGIN TRANSACTION
和COMMIT [TRANSACTION]
(或ROLLBACK
)启动和完成的,而不是用BEGIN
。。。END
。