首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何绕过SQL Server 2008上的触发器

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

Stack Overflow用户
提问于 2012-03-01 20:39:23
回答 5查看 10K关注 0票数 7

我想在某些情况下绕过触发器,有人能帮我吗?

我尝试了一下this link,但找不到解决方案。

提前感谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-01 20:43:57

你无法避免触发器的运行。您可以在其中添加条件,例如:

代码语言:javascript
复制
CREATE TRIGGER trigger_name
   ON table
   AFTER INSERT 
AS
begin
   IF (your condition) begin
     --code
   END
end

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

票数 9
EN

Stack Overflow用户

发布于 2012-03-01 20:59:19

步骤1禁用触发器

代码语言:javascript
复制
DISABLE TRIGGER Person.uAddress ON Person.Address;

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

第2步做一些事情

代码语言:javascript
复制
UPDATE Person.Address SET HouseNumber = REPLACE(HouseNumber, ' ', '');

Step 3启用触发器

代码语言:javascript
复制
ENABLE Trigger Person.uAddress ON Person.Address;

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

--必须说,小心使用!

票数 10
EN

Stack Overflow用户

发布于 2014-06-11 15:11:42

您可以通过检查临时表的存在来禁止触发器。需要取消触发器的代码应该创建一个临时表(比如#suppress_trigger)。在触发器中,检查该临时表是否存在并返回。示例:

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9516406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档