簡體   English   中英

在沒有觸發器的情況下將記錄插入具有觸發器的表中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM