我在存儲過程中有一個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