在什么情况下,更新Join表在T-SQL中没有FROM语句的情况下工作?

时间:2012-06-04 19:37:50

标签: sql sql-server tsql

我试图找出这两个陈述有效或无效的情况。我能够在一个项目中使用声明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;

1 个答案:

答案 0 :(得分:0)

您的语句1应该在编译时抛出错误。 update syntax

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

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

  1. 更新[别名或对象名称]
  2. 设置声明
  3. From(如果您使用了别名)
  4. Where statement
  5. 正如jonnyGold所说,你的第二个例子是使用连接或任何复杂查询进行更新的理想方式。对于简单查询,您只需执行“update [object] set ... where ...”。