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
?