5
我有一個觸發器,它使用相同插入記錄的標識主鍵(MessageId)的值更新一個插入字段(RootId)。聲明包含一個沒有INTO子句錯誤的OUTPUT子句
ALTER TRIGGER [dbo].[Trigger_RootIdUpdate]
ON [dbo].[Messages]
AFTER INSERT
AS BEGIN
SET NOCOUNT ON;
DECLARE @MessageId Int
SELECT @MessageId = I.MessageId
FROM INSERTED I
UPDATE Messages
SET RootId = @MessageId
WHERE MessageId = @MessageId AND MessageId = 0
END
我用它在Azure和當我插入一排,它給了我下面的錯誤:當插入記錄的RootId字段的值爲0 觸發看起來像這樣的更新應該只發生
The target table 'dbo.Messagess' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.
同樣的觸發器在我真正的MS SQL 2012上工作。我假設設置有所不同,但我沒有得到它試圖告訴我的。
我是不是過於複雜? 謝謝!
請顯示包含'OUTPUT'子句的語句。我之前在SQL Server 2008上看到過這個錯誤,不得不求助於'OUTPUT INTO @ tablevar',然後從表變量中進行選擇。 –
由於這個錯誤,我在2008 R2中使用'OUTPUT INTO @ tablevar'作爲防禦目的(在有人創建觸發器的情況下)。我只輸出主鍵,然後在選擇時加入@tablevar,因爲它不適用於所有數據類型,IIRC。 –
該錯誤由Azure/Silverlight表編輯器生成。我假設當我在那裏編輯一行時,Azure會生成一個T-SQL語句,其中包含沒有INTO的OUTPUT。使用C#/ LINQ代碼來更新行。 –