2

SQLスクリプトを使用してレコードの存在を特定の条件でチェックすることにより、テーブルにレコードを追加しようとしています。マージステートメントを使用して試しています。それが機能していないので、私が間違っているところを見つけることができませんでした。誰かがこれで私を助けることができますか?ありがとう

MERGE Categories As target
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName'
    ) AS source on (source.CategoryKey = target.CategoryKey)
WHEN Not Matched THEN
    INSERT VALUES ('TestName');
4

2 に答える 2

2

これでうまくいきます:

MERGE Categories As target
USING (SELECT 'TestName' AS CategoryName) AS source 
    ON (source.CategoryName = target.CategoryName)
WHEN NOT MATCHED THEN
    INSERT (CategoryName) VALUES ('TestName');
于 2012-05-14T11:43:59.543 に答える
2

正確に何を達成しようとしていますか?

ターゲットとソースとして同じテーブルを使用しているため、主キーであると想定している CategoryKey を比較しているWHEN Not Matchedため、ID 1、2、および 3 のテーブルがある場合、条件が評価されることはありません。 ID=ID の場合、それ自体と比較すると、すべての行が true と評価されます。

私が話している動作を見ることができる簡単なテスト更新SOPに変更WHEN Not Matched THENして書いてみてくださいWHEN Matched then UPDATE

編集これを試してください(IDが自動インクリメントであると仮定します)

MERGE Categories As target
    USING (
    SELECT CategoryKey 
    From Categories where CategoryName = 'TestName'
    ) AS source on (source.CategoryName = target.CategoryName)
WHEN Not Matched THEN
    INSERT VALUES ('TestName');
于 2012-05-14T11:49:27.417 に答える