1

SQL Server 2008 で MERGE コマンドを使用して、テーブルの行を挿入/更新しています。ただし、ターゲット テーブルとソース テーブルは同じです。そのため、行が存在するかどうかを確認し、同じテーブルで更新するか、挿入します。ただし、次のスクリプトを使用して挿入を行うことはできません。

何が問題なのか指摘していただけますか?

   `MERGE INTO Table1 as t
    USING (SELECT * FROM Table1 WHERE ConsumerId = @ConsumerId AND Table1Id = @Table1Id) AS s
    ON (t.ConsumerId = s.ConsumerId
    AND t.Table1Id = s.Table1Id) 
    WHEN MATCHED THEN
        UPDATE SET
            VersionNumber = s.VersionNumber + 1
    WHEN NOT MATCHED THEN
        INSERT (
            ConsumerId,
            Table1Id,
            VersionNumber
            )
        VALUES (
            @ConsumerId,
            @Table1Id,
            1
            );

これを実行すると、0 行が影響を受けます。

4

1 に答える 1

0

必要に応じて、UPDATE/INSERT ステートメントの場合、ソース テーブルには常に値が含まれている必要があります。変数をソース テーブルとして配置し、UPDATE ステートメントで SET VersionNumber on VersionNumber += 1ORを変更します。t.VersionNumber = t.VersionNumber + 1

MERGE INTO Table1 as t
USING (
       SELECT @ConsumerId AS ConsumerId, 
              @Table1Id AS Table1Id, 
              1 AS VersionNumber
       ) AS s
ON (t.ConsumerId = s.ConsumerId AND t.Table1Id = s.Table1Id) 
WHEN MATCHED THEN
  UPDATE 
    SET VersionNumber += 1
WHEN NOT MATCHED THEN
    INSERT (
            ConsumerId,
            Table1Id,
            VersionNumber
            )
    VALUES (
            s.ConsumerId,
            s.Table1Id,
            s.VersionNumber
            );

SQLFiddle のデモ

于 2013-05-04T07:29:30.097 に答える