Ich habe einen Trigger, der eines der eingefügten Felder (RootId) mit dem Wert des Identitätsprimärschlüssels (MessageId) desselben eingefügten Datensatzes aktualisiert. Das Update sollte nur dann geschehen, wenn das rootID Feld des eingefügten Datensatz ist 0. Der Auslöser wie folgt aussieht:Anweisung enthält eine OUTPUT-Klausel ohne INTO-Klausel Fehler
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
ich es in Azure verwenden und wenn ich eine Zeile einfügen, es gibt mir die folgende Fehlermeldung:
Derselbe Trigger funktioniert auf meinem echten MS SQL 2012. Ich nehme an, dass es einen Unterschied in den Einstellungen gibt, aber ich bekomme nicht, was es versucht, mir zu sagen.
Bin ich etwas zu kompliziert? Danke!
Bitte zeigen Sie die Anweisung, die die OUTPUT-Klausel enthält. Ich habe diesen Fehler zuvor in SQL Server 2008 gesehen und musste zu OUTPUT INTO @ tablevar wechseln und dann aus der Tabellenvariablen auswählen. –
Ich verwende 'OUTPUT INTO @ tablevar' in 2008 R2 auch für defensive Zwecke (falls jemand einen Trigger erstellt) wegen dieses Fehlers. Ich habe jedoch nur Primärschlüssel OUTPUT, und dann @tablevar bei der Auswahl beizutreten, weil es nicht mit allen Datentypen, IIRC funktioniert. –
Der Fehler wird vom Azure/Silverlight-Tabelleneditor generiert. Ich gehe davon aus, dass Azure beim Bearbeiten einer Zeile eine T-SQL-Anweisung generiert, die OUTPUT ohne INTO enthält. Die Verwendung des C#/LINQ-Codes zum Aktualisieren einer Zeile funktioniert. –