我在存储过程中有一个SQL Server更新语句,它在执行过程中违反了约束,但是约束在整个更新语句完成后有效。如何按特定顺序执行SQL Server更新?
的说法是:
UPDATE SomeTable SET FieldA = 1 WHERE FieldB = @SomeFieldBValue;
表中的行SomeTable形成子行引用父行的层次关系。该约束确保父行不能将FieldA设置为非空值,除非所有子行都将FieldA设置为非空值。
因此,举例来说,让我们假设SomeTable包含以下数据:
Id | ParentId | FieldA | FieldB
-- | -------- | ------ | ------
1 | NULL | NULL | 123
2 | 1 | NULL | 123
现在,当更新语句执行失败约束发生冲突,因为第1行是不允许有FIELDA设为非除非它的所有子元素都将FieldA设置为非空值。
暂时禁用约束不是一个选项,因为用户没有权限执行此操作。
而更新语句不按某种顺序处理。这是一套基于操作。你需要在这里执行2个独立的更新语句。 –
谢谢,我编辑了这个问题来删除排序的假设。 – flange