Tengo un activador que actualiza uno de los campos insertados (RootId) con el valor de la clave principal de identidad (Id. De mensaje) del mismo registro insertado. La actualización sólo debería ocurrir cuando el campo IDraiz del registro insertado es 0. El disparador es el siguiente:La instrucción contiene una cláusula OUTPUT sin error de cláusula 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 en Azure y cuando inserto una fila, me da el siguiente error:
The target table 'dbo.Messagess' of the DML statement cannot have any enabled triggers if the statement contains an OUTPUT clause without INTO clause.
El mismo disparador funciona en mi MS SQL real 2012. Supongo que hay una diferencia en la configuración, pero no entiendo qué intenta decirme.
¿Estoy sobrecomplicando algo? Gracias!
Por favor, muestre la declaración que contiene la cláusula 'OUTPUT'. He visto ese error antes en SQL Server 2008 y tuve que recurrir a 'OUTPUT INTO @ tablevar' y luego seleccionar desde la variable de la tabla. –
Utilizo 'OUTPUT INTO @ tablevar' en 2008 R2 para fines defensivos también (en caso de que alguien cree un disparador) debido a este error. Sin embargo, solo salí las teclas principales y luego me uní a @tablevar al seleccionar porque no funcionaba con todos los tipos de datos, IIRC. –
El error es generado por el editor de tablas Azure/Silverlight. Supongo que cuando edito una fila allí, Azure genera una instrucción T-SQL, que incluye la SALIDA sin INTO. Usar el código C#/LINQ para actualizar una fila funciona. –