Possiedo un trigger che aggiorna uno dei campi inseriti (RootId) con il valore della chiave primaria identità (MessageId) dello stesso record inserito. L'aggiornamento dovrebbe avvenire solo quando il campo RootId del record inserito è 0. L'innesco si presenta così:contiene una clausola OUTPUT senza errore nella clausola INTO
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
lo uso in Azure e quando inserisco una riga, mi dà il seguente errore:
The target table 'dbo.Messagess' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.
Lo stesso trigger funziona sul mio vero MS SQL 2012. Presumo che ci sia una differenza nelle impostazioni ma non ottengo quello che prova a dirmi.
Sono troppo complicato? Grazie!
Si prega di mostrare la dichiarazione che contiene la clausola 'OUTPUT'. Ho già visto questo errore su SQL Server 2008 e ho dovuto ricorrere a "OUTPUT INTO @ tablevar', quindi selezionare dalla variabile table. –
Io uso 'OUTPUT INTO @ tablevar' nel 2008 R2 anche a scopo difensivo (nel caso in cui qualcuno crea un trigger) a causa di questo errore. Ho solo OUTPUT le chiavi primarie, però, e quindi mi unisco a @tablevar quando lo seleziono perché non ha funzionato con tutti i tipi di dati, IIRC. –
L'errore viene generato dall'editor delle tabelle di Azure/Silverlight. Presumo che quando si modifica una riga, Azure genera un'istruzione T-SQL, che include OUTPUT senza INTO. Utilizzando il codice C#/LINQ per aggiornare una riga funziona. –