Usar salida para establecer una variable en una statement de fusión

Tengo una statement de fusión que debe actualizar o insert un único logging siempre. Quiero recordar la identificación de esa statement en una variable. Se parece a esto:

DECLARE @int int MERGE dbo.table AS A USING (SELECT 'stringtomatch' AS string) AS B ON B.string= A.string WHEN MATCHED THEN UPDATE SET somecolumn = 'something' WHEN NOT MATCHED THEN INSERT VALUES ('stringtomatch', 'something') OUTPUT @int = inserted.ID; 

Ahora esto no funciona porque no puede establecer @int en la cláusula de salida de esta manera. Sé que podría crear una temptable y utilizar INTO @temptable en la salida. Pero como que siempre es un único logging, quiero tener el ID en una variable INT. ¿Esto es posible? O estoy obligado a usar una variable de tabla. Espero que me falta una syntax.

No, debes usar una variable de tabla con OUTPUT

Sin embargo, puedes hacer esto …

 ... WHEN MATCHED THEN UPDATE SET @int = ID, somecolumn = 'something' WHEN NOT MATCHED THEN INSERT VALUES ('stringtomatch', 'something'); SET @int = ISNULL(@int, SCOPE_IDENTITY()); 

La "asignación en ACTUALIZACIÓN" ha sido una syntax válida para SQL Server durante mucho time. Ver MERGE en MSDN también. Ambos dicen esto:


<set_clause>::=

CONJUNTO

@ variable = expresión