回答
你不能避免运行触发器。 你可以做的就是添加条件的,例如:
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中的触发器
- 5. sql server 2008 - 没有触发器的sqlcachedependency?
- 6. SQL Server 2008 R2中的触发器
- 7. SQL Server 2008中的简单触发器
- 8. 更新触发器在SQL Server 2008
- 9. INSERT触发器后 - SQL Server 2008中
- 10. SQL Server 2008 R2触发器标识列
- 11. 触发器在sql server 2008中
- 12. 将MySql触发器转换为SQL Server 2008 R2触发器
- 13. 通过SQL Server 2008中的触发器使用bcp
- 14. SQL Server:触发器触发
- 15. SQL Server 2008触发器:通过输入键比较数据
- 16. 如何在SQL Server 2008中使用备份与触发器?
- 17. SQL Server 2008 - 如何使用DELETE触发器更新字段
- 18. 如何在sql server 2008中插入触发器后使用
- 19. 如何为自动更新创建触发器与SQL Server 2008
- 20. Sql Server触发器
- 21. Sql Server触发器
- 22. SQL Server触发器
- 23. 我在sql server 2008中的第一个sql触发器
- 24. 发送邮件的SQL Server 2008触发器
- 25. 如何在SQL Server上或之前选择创建触发器2008
- 26. SQL Server触发器,存储过程
- 27. SQLite触发到SQL Server Express 2008
- 28. SQL server 2008 r2触发位置
- 29. SQL Server 2005复制触发器 - 如何?
- 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