2014-03-31 39 views
0
CREATE TRIGGER [Ins] ON [databasename].[dbo].[tablename] 
    AFTER INSERT 
AS 
BEGIN 
    DECLARE @timerange as INT 
    SET @timerange = 40 
    UPDATE [databasename].[dbo].[tablename] 
     SET [column2] = (SELECT TOP 1 [column1] 
           FROM [CIMPLICITY].[dbo].[tablename] AS s2 
           WHERE DATEDIFF(MI,s2.[timestamp],[databasename].[dbo].[tablename].[timestamp]) <= ROUND([databasename].[dbo].[tablename].[column3],0)) 
    WHERE 
     DATEDIFF(MI,[timestamp], SYSDATETIME()) < @timerange 
END 
GO 

添加一個新行表之後,觸發器必須重新計算在塔2 第2列中的值的值=在第1列的值由分鐘等於向後偏移值在第3列中。之後SQL Server插入觸發器

觸發器可以工作,但填充數據表的應用程序在觸發器後停止工作。 我認爲在觸發代碼中的錯誤。

在提前感謝和抱歉,我的英語GOOGLETRANSLATE :)

+0

你可以定義:停止工作。是否有錯誤訊息? –

回答

2

也許你的問題是觸發更新記錄在表中,而不是僅僅插入的結果。

如果是這樣,添加另一個WHERE條件:

WHERE [primary key column] IN 
    (SELECT [primary key column] from inserted) 

inserted是由當前INSERT語句進行處理的所有記錄的別名。

+0

我試着修改WHERE條件到哪裏 \t \t [timestamp] IN(從插入的SELECT [timestamp]),並且最後一行中的值已更新,但是更新此數據庫中的數據的應用程序已停止工作 – romaACE

-1

我找到了解決問題的方法:有必要在BEGIN之後加SET NOCOUNT ON。 我不知道爲什麼,但它的工作:)