3つの異なるテーブルに挿入する必要があるストアドプロシージャがありますが、1つの入力から生成されたIDを取得して次のテーブルに挿入する必要があります。私はINSERT-OUTPUT
構成に精通していますが、この特定のケースで使用する方法についてはわかりません。他のテーブルの列を含む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
句で一種の参加をすることは可能ですか?
を挿入した以外のものを使用することはできませんので、あなたがエラーを取得していますまたはINSERTEDを使用することができます。更新と削除では、クエリで使用されている他のテーブルを参照できます。 以下のマージオプションは、SQL Server 2008以降を使用している限り機能します。私がそれ以外の方法で見つけた唯一の方法は、私が挿入しているテーブルの未使用の列を見つけて、その列に値(あなたの場合はGUID)を入れ、後で戻って列を引き出します(そしてそれをヌルに戻して、そこに留まらないようにしてください)。 –
これを試してみてください.GUID – user123456