这两个简单的SQL Update语句之间有什么区别吗?

时间:2012-04-04 08:14:49

标签: sql sql-server-2005

UPDATE table1
SET col = 1
WHERE col2 = 'xyz'


UPDATE a
SET col = 1
FROM table1 a
WHERE col2 = 'xyz'

哪个更受欢迎?

我可以发现的一个区别是第二个语句允许在'FROM'语句附近使用WITH NO LOCK。但是当在update语句附近使用时,它会给出与第一个语句相同的错误消息

INSERT,UPDATE或DELETE语句的目标表不允许使用NOLOCK和READUNCOMMITTED锁提示。

非常感谢

4 个答案:

答案 0 :(得分:3)

如果您需要或者有信心使用别名(如您的示例中)或者像这样的JOIN,您可以使用FROM语法:

UPDATE a
SET col = 1
FROM table1 a
INNER JOIN table2 b ON b.id = a.bid
WHERE b.col = 'x'

答案 1 :(得分:3)

他们是一样的。

如果UPDATE语句只涉及访问单个表,则1st更清晰/更简单。

如果你需要做,例如一个JOIN,然后为你的第二个例子分配一个别名是(IMO)清理器,如:

UPDATE a
SET a.Col = 1
FROM TableA a
    JOIN TableB b ON a.Id = b.Id
WHERE b.Something = '123'

顺便说一句,没有必要在正在更新的表上指定NOLOCK提示,所以不要将其视为一个在另一个上的原因。

答案 2 :(得分:2)

使用方法2的一个常见方案是,如果需要根据连接表上的过滤器进行更新,例如

UPDATE a
SET a.col = 1
FROM table1 a inner join table2 b on a.someFK = b.somePK
WHERE a.col2 = 'xyz' and b.col3 = 'abc'

答案 3 :(得分:1)

两者都很好,但这取决于你需要什么。

第一个示例更简单,但不允许您使用其他表中的值。

如果您必须使用其他表中的值来更新表格,示例2非常有用,就像Mulmoth所证明的那样。