У меня есть хранимая процедура, которую нужно вставить в три разные таблицы, но мне нужно получить идентификатор, сгенерированный с одного ввода, и использовать его для вставки в следующую таблицу. Я знаком с конструкцией INSERT-OUTPUT
, но я не уверен, как использовать ее в этом конкретном случае.
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
Но я получаю следующие ошибки:
Идентификатор с несколькими частями "g.GUID" не может быть связан.
Идентификатор с несколькими частями "c.GUID" не может быть связан.
Я получу аналогичные ошибки, если вместо этого использую s.GUID
. Возможно ли сделать какое-то соединение в предложении OUTPUT
?