【问题标题】:Trigger did not execute触发器未执行
【发布时间】:2016-05-12 08:37:25
【问题描述】:

我写了一个简单的触发器:

CREATE TRIGGER test_tr 
ON bi_test_tr
AFTER INSERT, UPDATE, DELETE
AS
BEGIN  
    INSERT INTO test (datechange, sum1, sum2, sum3) 
        SELECT 
            GETDATE(), SUM([filed1]), SUM([filed2]), SUM([filed3])
        FROM bi_test_tr 
END
GO

触发器应将 3 列(filed1、filed2、filed3)的总和插入到表 test 中,并显示当前日期。

但是当我将新数据集上传到bi_test_tr 时,test 中没有插入任何内容。

你知道为什么吗?

【问题讨论】:

  • 任何未能引用 inserted or deleted 的 SQL Server 触发器都会引发警告 - 在触发器中,您没有使用关于 which 行的信息表中的内容刚刚更改。
  • 这很奇怪,因为来自 Radu 的代码正在运行....
  • 还有什么奇怪的:当我从触发器运行代码时,它运行完美:/

标签: sql sql-server sql-server-2008 triggers database-trigger


【解决方案1】:

我刚刚使用以下代码测试了您的代码:

create table bi_test_tr (
    filed1 int,
    filed2 int,
    filed3 int
)
GO

create table test (
    datechange datetime,
    sum1 int, 
    sum2 int, 
    sum3 int
)
GO

CREATE TRIGGER test_tr 
ON bi_test_tr
AFTER INSERT, UPDATE, DELETE
AS
BEGIN  
    INSERT INTO test (datechange, sum1, sum2, sum3) 
        SELECT 
            GETDATE(), SUM([filed1]), SUM([filed2]), SUM([filed3])
        FROM bi_test_tr 
END
GO

insert into bi_test_tr values (1,1,1);
insert into bi_test_tr values (2,2,2);
insert into bi_test_tr values (3,3,3);
insert into bi_test_tr values (4,4,4);
insert into bi_test_tr values (5,5,5);

select * from test

并且得到了预期的结果:

2016-05-12 12:03:09.253    1    1   1
2016-05-12 12:03:09.287    3    3   3
2016-05-12 12:03:09.307    6    6   6
2016-05-12 12:03:09.307   10    10  10
2016-05-12 12:03:09.310   15    15  15

除非我错过了什么?

【讨论】:

  • 嗨,您的代码正在运行....我不知道为什么我的选择有问题?因为进入表 bi_test_tr 我有一个 col1,col2....col20,我需要做其他选择?
  • 嗯,这似乎根本不重要;寻找更简单的东西,并仔细检查 - 触发器是否真的部署了?如果您在其中执行 PRINT 语句会怎样?试着一步一步来……
  • 已部署:我得到的结果与运行您的代码时完全相同.....如何打印它??
  • 我也在使用向导导入数据将其附加到表中 -> 这可能是原因吗?
  • @4est:是的!通过批量插入导入数据时,默认情况下不会触发触发器。 technet.microsoft.com/en-us/library/ms187640(v=sql.105).aspx
【解决方案2】:

我认为您应该先进行选择,然后再进行插入。但我不确定,但你应该这样做

select getdate(), sum([field1]), sum([field2]), sum([field3]) into var1, var2, var3;

并且必须首先声明这 3 个变量。 最后,您只需插入这些变量。

同样,我不确定,但你可以试试 :)

【讨论】:

    猜你喜欢
    • 2017-05-29
    • 1970-01-01
    • 2013-12-11
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多