2016-05-20 2 views
0

は、私は次のクエリを持っている:Products.Id & BulkProducts.Idを想定し出力Inserted.Idし、別のフィールド

DECLARE @OutProduct TABLE 
(
    ProductID INT, 
    BulkProductId INT 
) 

INSERT INTO dbo.Products 
     (EanCode , 
      ChangedDateTime , 
      ChangedById , 
      Deleted 
     ) 
OUTPUT INSERTED.ID, BulkProducts.Id INTO @OutProduct (ProductID, BulkProductId) 
SELECT EanCode , 
     GETDATE(), 
     GETDATE(), 
     0 
FROM dbo.BulkProducts 
WHERE ProductId is NULL 

は自動インクリメントID列です:

私が達成しようとしているもの:

@OutProductテンポラリテーブルには、ちょうど挿入されたProducts.Idとその行のIDがBulkProductsであるタプルが含まれています。

私が遭遇したこと:BulkProducts.Idは、有効な構文ではないため、OUTPUT INSERTED.ID, BulkProducts.Id INTOステートメントでは使用できません。

どうすればこの問題を解決できますか?

編集:私は、SQL Serverを使用しています2012年

+0

? –

+0

SQL Server 2012 –

+0

あなたは[MERGE']を乱用することができます(http://stackoverflow.com/questions/16328806/can-i-keep-old-keys-linked-to-new-keys-when-making-a-あなたは挿入を行うことができますが、ソーステーブルを参照することもできます。 –

答えて

1

あなたが探検したい場合がありますMERGE

MERGE INTO dbo.Products 
USING dbo.BulkProducts AS src 
    ON 1 = 0 -- Never match 
WHEN NOT MATCHED THEN 
    INSERT(EanCode, ChangedDateTime, ChangedById, Deleted) 
    VALUES(src.EanCode, GETDATE(), GETDATE(), 0) 
OUTPUT 
    inserted.Id, 
    src.Id 
INTO @OutProduct; 

参考:あなたは、SQL Serverのどのバージョンを使用している

Dr. OUTPUT or: How I Learned to Stop Worrying and Love the MERGE by Adam Machanic

+0

2行目から最後の行まで: 'MERGE文はセミコロン(;)で終わらなければなりません'編集:ええ、 2行目から2行目まで。 –

+0

@ iuliu.netもう一度やり直せますか?私は更新しました。 –

+0

これは素晴らしいことです。しかし、私はあなたの例を私のケースに適用することはできないようです。「SELECT FROM」ステートメントで「INSERT」と言います。 –

関連する問題