2015-11-26 99 views
1

我正在做一個C#中的觸發器在SQL Server更新記錄2012年的問題是:插入記錄不出手

記錄的表有一個觸發器,它更新一個字段我不想更新(在這種情況下,因爲我會手動)。

觸發是這樣的:

ALTER TRIGGER [dbo].[TriggerName] 
ON [dbo].[TableName] 
AFTER UPDATE 

所以,我更新後,觸發跳,重寫我的更新。

有什麼辦法可以避免觸發?

我知道,我可以改變「更新後」爲「而不是更新」,但如果不觸及觸發(如果是唯一的機會,我會做)

感謝您的時間什麼辦法,我寧願!

回答

2

有幾個選項。

1.具體的SQL語句禁用觸發器:

按照下面的鏈接。我從來沒有實施過這種方法,所以沒有太多的話要說。 https://www.mssqltips.com/sqlservertip/1591/disabling-a-trigger-for-a-specific-sql-statement-or-session/

2.添加一列/屬性:添加列到你的表稱爲run_trigger或類似的規定。在新列中設置值時,更新觸發器不運行。

如果您在其他查詢和存儲過程中使用SELECT *檢索數據,這可能很危險。理想情況下,您不應該在程序或存儲過程中使用SELECT *

3.觸發後更新領域: 更新觸發時特定的列被更新,才能執行(當你要設置列被更新,即不運行觸發)。運行第一個查詢,然後手動更新/重置該值。

這並不理想,因爲您將表格打得更多,可能會導致任何審覈日誌看起來有點滑稽。

此解決方案可能不可行,具體取決於觸發器是否應在正常情況下僅在更新一列時運行。

4.禁用/啓用觸發器: 您可以禁用然後重新啓用觸發器。

ALTER TABLE <table> DISABLE TRIGGER <trigger>; 
ALTER TABLE <table> ENABLE TRIGGER <trigger>; 

如果在重新啓用觸發器之前沒有/在表上保持鎖定,這可能很危險。禁用觸發器會打開數據損壞的大門。不要使用這種方法,除非在重新啓用觸發器之前可以鎖定表格。