2016-03-31 1 views
0

私はMERGEステートメントを使用して、POSから当社のウェブサイトに製品を「プッシュ」しています。しかし、私はMERGEステートメントで使用されているソーステーブルとターゲットテーブルの両方のIDを追跡できる必要があります...基本的に、tblA ID <> tblB IDの関係を追跡するテーブルを生成したいとします。 (私は単にsource.IDを試した私が午前問題は、私はtblMappingsテーブルにsource.IDを記録する方法がわからないということですSQL Server MERGEステートメントを使用する際にIDの関係を追跡する方法は?

http://sqlfiddle.com/#!3/bc8b40/3/0

が、それはしませんでした:それはちょうどお見せする方が簡単です作業)。誰でも私がこれをどうやってできるか知っていますか?

1つの要件:クエリは、PHP SQLSRVドライバを介して実行できる必要があります。

ありがとうございます!

+0

'Source.ID'は実際に動作するはずです。 'DELETED.ID'の代わりに' Source.ID'を使うと何が見えますか? – AKS

+0

は動作するはずです:http://sqlfiddle.com/#!3/da944/1 – cha

+0

ハ!それは動作します...私は試してみたときにタイプミスをしたかもしれません...確認してくれてありがとう! – derekmx271

答えて

0

source.IDと私は正しいアイデアを持っていたと思いますが、試してみるとどこかのタイプミスがありました。ありがとう@cha

MERGE tblTarget AS target 
USING (
    SELECT 
    ID, 
    SKU, 
    Name 
    FROM tblSource 
) AS source (
    ID, 
    SKU, 
    Name 
) 
ON (target.SKU = source.SKU) 
WHEN MATCHED THEN 
    UPDATE SET 
     Name = source.Name 
WHEN NOT MATCHED THEN 
    INSERT (
    SKU, 
    Name 
) 
    VALUES (
    source.SKU, 
    source.Name 
) 
OUTPUT 
    $ACTION ChangeType, 
    COALESCE(Inserted.SKU, Deleted.SKU) SKU, 
    /* The source table's alias works just fine apparently... */ 
    source.ID SRC_ID, 
    Inserted.ID TGT_ID, 
    GETUTCDATE() Last_Updated 
INTO tblMappings; 

SELECT * 
FROM tblMappings; 
関連する問題