1

我试图找出这两个语句有效或无效的情况。我能够在一个项目中使用声明 1 几次;但是我无法解读其中的区别。声明 1

UPDATE tbl1 AS a INNER JOIN tbl2 as b where a.clm = b.clm
SET
    a.clm1 = 
    CASE
        WHEN b.clm2 = 1 THEN 11
        ELSE 2
    END,
  b.clm2 = 
    CASE
        WHEN b.clm4 = 2 THEN 3
        ELSE 100
    END;

相比

声明 2

UPDATE a
SET
a.clm1 = 
    CASE
        WHEN b.clm2 = 1 THEN 11
        ELSE 2
    END,
  b.clm2 = 
    CASE
        WHEN b.clm4 = 2 THEN 3
        ELSE 100
    END
FROM tbl1 AS a INNER JOIN tbl2 as b where a.clm = b.clm;
4

1 回答 1

0

您的语句 1 应该在编译时引发错误。更新语法

更新后始终必须跟被更新的对象。否则,SQL Server 将不知道连接中的哪个表是需要更新的表。

如果您参考 msdn 文章的链接,您会看到语法需要以下内容:

  1. 更新 [别名或对象名称]
  2. 设置语句
  3. 从(如果您使用别名)
  4. 哪里声明

正如 jonnyGold 所说,您的第二个示例是使用连接或任何复杂查询进行更新的理想方式。对于简单的查询,您只需执行“更新 [object] set...where...”。

于 2012-06-04T20:54:24.783 回答