我們在一個非常大的表上有一個列約束,以確保沒有插入或更新的數據可以記錄零或更低的庫存水平。偶爾我們的應用程序會報告錯誤,因爲這些約束被違反。違反日誌列約束條件
如果違反約束條件,是否有任何方法將數據行寫入表或日誌文件?
我們在一個非常大的表上有一個列約束,以確保沒有插入或更新的數據可以記錄零或更低的庫存水平。偶爾我們的應用程序會報告錯誤,因爲這些約束被違反。違反日誌列約束條件
如果違反約束條件,是否有任何方法將數據行寫入表或日誌文件?
最好的辦法是在桌子上放置一個BEFORE INSERT,UPDATE觸發器。
在觸發器中,檢查inserted
表以確定是否有任何行違反約束,如果有,請將它們寫入日誌表而不是目標表。
然後將任何不違反約束的行寫入目標表。
可悲的是,那裏不是sql server中的before觸發器,你將不得不使用觸發器。 –
哎呀,對,這就是SQL Server調用它的原因。 –
是的。我看到我被推入觸發器解決方案。觸發器的INSTEAD使用TRY ... CATCH來查看插入或更新是否返回違反約束的錯誤號。如果他們這樣做,寫一張表,如果沒有,就繼續進行數據更改。 感謝您的建議,每個人。 – cloudsafe
我認爲,不是開箱即用。你總是可以建立一個觸發器。 – HoneyBadger
@HoneyBadger,如果在表定義時已經創建了檢查約束,則不需要創建顯式觸發器。 –
@AnkitBajpai如果是這種情況,您可以添加一個答案來描述如何記錄違規行爲。 – HoneyBadger