使用WHERE子句检查相同字段来更新表字段是否安全?

时间:2009-06-10 09:22:47

标签: sql

我有这样的想法:

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [SomeField] is NULL

它是否有效或者是否在迭代时修改集合?

或者写这样的东西?

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [ID] IN (SELECT [ID]
               FROM [MyTable]
               WHERE [SomeField] is NULL)

2 个答案:

答案 0 :(得分:8)

是。更新操作仅发生在与WHERE子句匹配的表行上。

考虑一下WHERE子句选择行后跟SET子句更新那些选定的行。

答案 1 :(得分:4)

要明确你只需要做

UPDATE [MyTable]
SET [SomeField] = 1
WHERE [SomeField] is NULL

因为where子句仅用于减少应用更新的范围。

听起来您正在从开发背景进入SQL,因此您可能会觉得有用的一条建议是在事务中尝试您的操作。这样你就可以撤消你所犯的任何错误并改进你正在处理的sql。

利用此次运行

BEGIN TRAN

在执行要测试的命令之前

ROLLBACK TRAN

撤消它,或

COMMIT TRAN

使其永久