variable update una tabla otra into inserted insertar datos copiar columna sql sql-server tsql sql-insert

una - output update sql server 2012



INSERT-OUTPUT incluyendo la columna de otra tabla (1)

No estoy seguro de si esa es la mejor opción, pero parece que puedes hacer el truco usando MERGE :

MERGE [Contacts] trgt USING ( SELECT [First_Name], [Last_Name], g.[GUID] as [GUID] FROM [SourceTable] s JOIN @guids g ON s.[GUID] = g.[GUID] )src ON (1=0) WHEN NOT MATCHED THEN INSERT ( [FirstName], [LastName], [ModifiedDate] ) VALUES (src.[First_Name],src.[Last_Name], GETDATE()) OUTPUT [inserted].[ContactID], src.[GUID] INTO @contacts

Tengo un procedimiento almacenado que se debe insertar en tres tablas diferentes, pero debo obtener la ID generada a partir de una entrada y usarla para insertarla en la siguiente tabla. Estoy familiarizado con la construcción INSERT-OUTPUT , pero no estoy seguro de cómo usarlo en este caso en particular.

DECLARE @guids TABLE ( [GUID] UNIQUEIDENTIFIER ); DECLARE @contacts TABLE ( [ContactID] INT, [GUID] UNIQUEIDENTIFIER ); DECLARE @mappings TABLE ( [TargetID] INT, [GUID] UNIQUEIDENTIFIER ); INSERT @guids ( [GUID] ) ... INSERT [Contacts] ( [FirstName], [LastName], [ModifiedDate] ) OUTPUT [inserted].[ContactID], g.[GUID] INTO @contacts SELECT [First_Name], [Last_Name], GETDATE() FROM [SourceTable] s JOIN @guids g ON s.[GUID] = g.[GUID] INSERT [TargetTable] ( [ContactID], [License], [CreatedDate], [ModifiedDate] ) OUTPUT [inserted].[TargetID], c.[GUID] INTO @mappings SELECT c.[ContactID], [License], [CreatedDate], [CreatedDate] FROM [SourceTable] s JOIN @contacts c ON s.[GUID] = c.[GUID] INSERT [Mappings] ( [TargetID], [SourceGUID] ) SELECT [TargetID], [GUID] FROM @mappings

Pero me salen los siguientes errores:

El identificador de varias partes "g.GUID" no se pudo enlazar.

El identificador de varias partes "c.GUID" no se pudo enlazar.

s.GUID errores similares si utilizo s.GUID en s.GUID lugar. ¿Es posible hacer un tipo de unión en la cláusula OUTPUT ?