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锁提示。
非常感谢
答案 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所证明的那样。