2016-05-12 31 views
0

我寫了一個簡單的觸發器:觸發沒有執行

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

你知道爲什麼嗎?

+0

任何無法引用[插入或刪除](https://msdn.microsoft.com/zh-CN/library/ms191300.aspx)的SQL Server觸發器都會引發警告鈴聲 - 您不是,在您的觸發器,使任何有關*表中哪些*行的信息被改變。 –

+0

這很奇怪,因爲Radu的代碼工作.... – 4est

+0

什麼也很奇怪:當我從觸發器運行代碼,它運行完美:/ – 4est

回答

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 

除非我失去了一些東西?

+0

嗨,你的代碼工作....我不知道爲什麼什麼我的 可能是我的選擇?因爲在表bi_test_tr我有一個col1,col2 .... col20,我需要做其他選擇? – 4est

+0

嗯,似乎不應該在所有重要;尋找更簡單的東西,並仔細檢查 - 觸發器是否真正部署?如果你在其中做一個PRINT語句會怎麼樣?嘗試一步一步地... –

+0

部署︰我得到完全一樣的結果,當我運行你的代碼.....如何打印它? – 4est

0

我認爲你應該先選擇然後插入。但我不確定,但你應該這樣做

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

而這3個變量必須首先聲明。 最後,你只需要插入這些變量。

同樣,我不知道這一點,但你可以試試:)