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

MAN*_*NGA 6 sql-server triggers sql-server-2005 sql-server-2008

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

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

提前致谢

Ral*_*ine 10

步骤1禁用触发

DISABLE TRIGGER Person.uAddress ON Person.Address;
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ms189748.aspx

第2步做东西

UPDATE Person.Address SET HouseNumber = REPLACE(HouseNumber, ' ', '');
Run Code Online (Sandbox Code Playgroud)

步骤3启用触发器

ENABLE Trigger Person.uAddress ON Person.Address;
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ms182706.aspx

- 必须说,小心使用!


Die*_*ego 8

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

CREATE TRIGGER trigger_name
   ON table
   AFTER INSERT 
AS
begin
   IF (your condition) begin
     --code
   END
end
Run Code Online (Sandbox Code Playgroud)

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


sql*_*nks 6

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