我试图找出这两个陈述有效或无效的情况。我能够在一个项目中使用声明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;
答案 0 :(得分:0)
您的语句1应该在编译时抛出错误。 update syntax
更新始终必须跟随正在更新的对象。否则,SQL Server将不知道连接中的哪个表是需要更新的表。
如果您参考msdn文章的链接,您将看到语法需要以下内容:
正如jonnyGold所说,你的第二个例子是使用连接或任何复杂查询进行更新的理想方式。对于简单查询,您只需执行“update [object] set ... where ...”。