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
            );

Runnig 这说:0 行受影响。

4

1 回答 1

0

如果需要 UPDATE/INSERT 语句,则源表应始终包含值。将您的变量作为源表并在 UPDATE 语句中更改 SET VersionNumber on VersionNumber += 1ORt.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 回答