[英]Insert record in a table with trigger without shot the trigger
我正在用c#更新SQL Server 2012中的記錄。問題是:
記錄表具有一個觸發器,該觸發器可以更新一個我不想更新的字段(在這種情況下,因為我將手動輸入它)。
觸發器是這樣的:
ALTER TRIGGER [dbo].[TriggerName]
ON [dbo].[TableName]
AFTER UPDATE
因此,在更新之后,觸發器將跳轉並重寫我的更新。
有什么辦法可以避免觸發?
我知道我可以將“ INSTEAD UPDATE”更改為“ AFTER UPDATE”,但我更願意在不觸碰觸發器的情況下進行任何操作(如果有機會,我會這樣做)
謝謝你的時間!
有一些選擇。
1.禁用特定SQL語句的觸發器:
請點擊以下鏈接。 我本人從未實現過這種方法,因此無需多說。 https://www.mssqltips.com/sqlservertip/1591/disabling-a-trigger-for-a-specific-sql-statement-or-session/
2.添加一列/屬性:在表中添加一列名為run_trigger
或類似內容。 在新列中設置值時,將觸發器更新為不運行。
如果在其他查詢和存儲過程中使用SELECT *
檢索數據,則可能很危險。 理想情況下,絕對不要在程序或存儲過程中使用SELECT *
。
3.觸發器后更新字段:將觸發器更新為僅在特定列更新時才執行(即,在要設置的列更新時不運行觸發器)。 運行第一個查詢,然后手動更新/重置該值。
這不是理想的選擇,因為您多擊了2倍,可能會使任何審核日志看起來有些滑稽。
此解決方案可能不可行,這取決於僅在更新一列時是否應在正常情況下運行觸發器。
4.禁用/啟用觸發器:您可以禁用然后重新啟用觸發器。
ALTER TABLE <table> DISABLE TRIGGER <trigger>;
ALTER TABLE <table> ENABLE TRIGGER <trigger>;
如果在重新啟用觸發器之前您沒有在表上保持鎖,這將很危險。 禁用觸發器將打開數據損壞的大門。 在重新啟用觸發器之前,除非可以鎖定表,否則不要使用此方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.