如何绕过SQL Server 2008上的触发器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (167)

我想在某些情况下绕过触发器,任何人都能帮助我吗?

我尝试使用此链接但无法找到解决方案。

提前致谢

提问于
用户回答回答于

你不能避免触发器被运行。您可以做的是在其中添加条件,例如:

CREATE TRIGGER trigger_name
   ON table
   AFTER INSERT 
AS
begin
   IF (your condition) begin
     --code
   END
end

如果你有一个INSTEAD OF触发器,请小心。如果不对插入进行编码,则表中不会插入任何内容。

用户回答回答于

您可以通过检查是否存在临时表来抑制触发器。需要抑制触发器的代码应该创建一个临时表(比如#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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励