UPDATE如何工作?

时间:2013-03-13 11:07:00

标签: sql sql-server tsql

我一直在处理存储过程已有一段时间了。 最近我一直想知道UPDATE究竟是如何工作的。

我有一个while循环,我逐个更新表中的某些行,直到所有相关的行都被更新。

我的同事建议我删除while循环并改为使用一个UPDATE语句。

但是,我不知道这是否可行?我不知道每次执行存储过程时哪些行都会更新。

我有一个表变量,它包含需要更新的所有ID的列表,并将其用作标识需要更新的行的键。 我可以在不使用while循环的情况下同时更新所有行吗?

4 个答案:

答案 0 :(得分:4)

您的同事建议称为基于设置的方法。

而是使用while循环或逐行处理行,您可以使用基于Set的方法来实现,这在所有方面都更好,让它成为性能或维护。

根据建议您可以使用IN子句或Inner Join来更新表,因为您有唯一值来更新相应的表。

UPDATE table_to_update 
SET whatever_you_want_to_set 
From temptable 
inner join temptable on temptable.key = table_to_update.key

我希望你有意义。

答案 1 :(得分:2)

您的同事是对的,因为多个查询最终可能会降低您的数据库速度。大问题不是问题。 我建议你按照这篇文章中的说明进行操作,它很好地演示了UPDATE命令的强大功能:http://www.karlrixon.co.uk/writing/update-multiple-rows-with-different-values-and-a-single-sql-query/

当然,在PHP中编写单个查询会使您更有可能犯错误。我建议您只需要PHP输出您的查询,而不是直接检查整个MySQL(或您使用的其他任何东西)。当然,不要使用实时数据库;)

答案 2 :(得分:1)

我以前做过的一件事就是在我的更新中使用join。我知道这听起来很奇怪,但它确实奏效了。

您还可以构建in子句或exists子选择。

in子句的一个危险是您使用的值列表是有限的。我过去遇到过一个问题,我的SQL语句太长而且无法执行。

答案 3 :(得分:1)

是的,你可以。有不同的方法,其中之一是

UPDATE table_to_update 
    SET whatever_you_want_to_set 
    WHERE table_id IN (SELECT id FROM @tableVariable);

你的同事有点重要 - 单个大UPDATE语句通常比单独的小UPDATE更快地执行更多

相关问题