2013-10-09 178 views
0

我有這個觸發器在另一個SQL服務器/數據庫上工作正常..現在它什麼都不做,我需要設置任何先決條件或想法爲什麼這不工作.. SQL Server 2008SQL觸發器不工作/更新表

create trigger Autoupdate6 -- Creating Trigger 
On NumericSamples 
For Insert 
As 
Insert Into BM1OILT 
Select SampleDateTime, SampleValue From NumericSamples 
Where TagID = 8 and UpdateC = 0 
UPDATE NumericSamples set UpdateC = 1 WHERE TagID = 8 
go 

感謝,

想通了,這是通過將觸發..插入到表是做批量插入,那裏的程序去與工作INSTEAD OF觸發器。再次感謝亞倫伯特蘭試圖找出與我一樣。

+0

你確定它應該影響任何行嗎?例如。也許沒有行插入TagID = 8或UpdateC = 0.無論如何,你的觸發器正在查看整個表 - 你應該限制你的查詢在'inserted'僞表中找到的行。 –

+0

大約有1000行符合這個標準。這只是在我的大腦中單擊,我在另一張桌子上做單行插入測試,現在它正在嘗試做多行..可能這是問題,我將如何重寫此.. –

+0

你有5個其他觸發器上這張桌子? –

回答

0

這將防止觸發器試圖對整個表進行操作:

CREATE TRIGGER dbo.Autoupdate6 
ON dbo.NumericSamples 
FOR INSERT 
AS 
BEGIN 
    INSERT INTO dbo.BM1OILT(...column names here please...) 
    SELECT SampleDateTime, SampleValue FROM inserted 
    WHERE TagID = 8 AND UpdateC = 0; 

    UPDATE n SET UpdateC = 1 
    FROM dbo.NumericSamples AS n 
    INNER JOIN inserted AS i 
    ON n.SampleDateTime = i.SampleDateTime 
    WHERE n.UpdateC = 0 AND n.TagID = 8; 
END 
GO 

您可能能夠摺疊此使用OUTPUT第一個發言,但也有組合的DML這麼多的限制,除非我們已經知道您的環境不受任何限制,否則通常只會浪費精力。

+0

我會把我的key_column名稱放在什麼位置?它會在那裏出錯。再次感謝您的幫助。 –

+0

@PatPav你的表有一個主鍵?試試看。 –

+0

我向BM1OILT添加了一個主鍵,NumericSamples已經有一個主鍵。嘗試了幾個不同的變化,但仍然沒有運氣。有一些設置,我錯過了SQL?我想我會嘗試遠程到我今天晚上的其他SQL服務器,看看我是否可以刪除重新創建觸發器,看看觸發器是否仍然有效,也許我做過一些事情,我忘了這次做... –