回答
你不能避免運行觸發器。 你可以做的就是添加條件的,例如:
CREATE TRIGGER trigger_name
ON table
AFTER INSERT
AS
begin
IF (your condition) begin
--code
END
end
只是要小心,如果你有一個INSTEAD OF觸發器。如果您沒有編寫插入代碼,則表格中不會插入任何內容。
感謝@diengo,但我有兩個表tableA和tableB我的觸發器無法處理多個記錄更新。所以現在,因爲我需要在tableA上更新大約100行,因此tableB上只有一條記錄被更新(我的意思是一次觸發是火災)。在這種情況下,我想繞過一個觸發器,我們將爲tableA和tableB更新編寫兩個更新語句。謝謝 – 2012-03-01 12:52:28
嗨manish! 我不明白。你可以說得更詳細點嗎?可能會提供一些示例 – Diego 2012-03-01 13:00:33
Table_A(ID,Name,Date) Table_B(BID,Name) 我們在Table_A上爲Update Table_B提供了寫入器更新觸發器。查看案例 更新表_A集名稱='OB'其中(1,2,3,4,5,6,7,... 100)中的ID 只有一次觸發器觸發。 – 2012-03-01 13:08:17
@Manish:我不認爲繞過觸發器是最佳實踐視角的好選擇。相反,我會評估,考慮並過濾觸發觸發器所需的一系列條件。
步驟1禁用觸發
DISABLE TRIGGER Person.uAddress ON Person.Address;
http://msdn.microsoft.com/en-us/library/ms189748.aspx
步驟2做的東西
UPDATE Person.Address SET HouseNumber = REPLACE(HouseNumber, ' ', '');
步驟3啓用觸發器
ENABLE Trigger Person.uAddress ON Person.Address;
http://msdn.microsoft.com/en-us/library/ms182706.aspx
- 必須說,小心使用!
您可以通過檢查是否存在臨時表來抑制觸發器。需要抑制觸發器的代碼應創建一個臨時表(例如#suppress_trigger)。在你的觸發器中檢查這個臨時表的存在和返回。 示例:
CREATE TABLE [dbo].[dummy](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Val] [char](1) NULL)
--create a history table which gets populated through trigger
CREATE TABLE [dbo].[dummy_hist](
[Id] [int] NULL,
[Val] [char](1) NULL)
CREATE TRIGGER [dbo].[trig_Insert]
ON [dbo].[dummy]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
if OBJECT_ID('tempdb..#Dummy_escape_trig') is not NULL
RETURN
INSERT INTO dummy_hist
SELECT * FROM inserted
END
--Proc for which trigger needs to be suppressed
CREATE PROCEDURE [dbo].[ins_dummy]
@val AS CHAR(1)
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #Dummy_escape_trig (id int)
INSERT INTO dummy
VALUES(@val)
END
- 1. SQL Server 2008觸發器
- 2. Sql Server 2008觸發器
- 3. 觸發器,SQL SERVER 2008
- 4. sql server 2008 - 沒有觸發器的sqlcachedependency?
- 5. SQL Server 2008中的觸發器
- 6. SQL Server 2008中的簡單觸發器
- 7. SQL Server 2008 R2中的觸發器
- 8. 如何在SQL Server 2008上創建插入更新觸發器
- 9. SQL Server 2008 R2創建觸發器
- 10. SQL Server 2008更新觸發器
- 11. 觸發器在sql server 2008中
- 12. 更新觸發器在SQL Server 2008
- 13. INSERT觸發器後 - SQL Server 2008中
- 14. SQL Server 2008 R2觸發器標識列
- 15. SQL Server 2008觸發器錯誤
- 16. 更新觸發器SQL Server 2008
- 17. 將MySql觸發器轉換爲SQL Server 2008 R2觸發器
- 18. 通過SQL Server 2008中的觸發器使用bcp
- 19. SQL Server:觸發器觸發
- 20. SQL Server 2008觸發器:通過輸入鍵比較數據
- 21. 如何在sql server 2008中插入觸發器後使用
- 22. 如何在SQL Server 2008中使用備份與觸發器?
- 23. 如何在SQL Server 2008中運行觸發器?
- 24. SQL Server 2008 - 如何使用DELETE觸發器更新字段
- 25. 如何爲自動更新創建觸發器與SQL Server 2008
- 26. 如何在插入後爲sql server 2008製作觸發器?
- 27. SQL Server 2008的觸發錯誤刪除
- 28. SQL Server觸發器
- 29. Sql Server觸發器
- 30. Sql Server觸發器
要做到這一點的唯一方法是暫時禁用觸發器。如果它出現在桌面上並且處於活動狀態,則無法繞過它。 – 2012-03-01 12:52:07
ok msrv_s。但是如何暫時禁用觸發器。你可以給我一個例子或一些代碼。再次感謝。 – 2012-03-01 12:55:02
(1)轉到MSDN,SQL Server聯機叢書,(2)搜索DISABLE TRIGGER - 您會在此處找到[此頁](http://msdn.microsoft.com/zh-cn/library/ms189748。 aspx)這給你**所有**你需要的細節.....禁用:禁用觸發器Person.uAddress ON Person.Address;'並重新啓用:'ENABLE TRIGGER Person.uAddress ON Person.Address ;' – 2012-03-01 13:07:57