【发布时间】:2010-09-29 13:15:23
【问题描述】:
假设我有一个表 tbl,其中包含列 id 和 title。 我需要更改标题列的所有值:
- 从“a-1”到“a1”,
- 从“a.1”到“a1”,
- 从“b-1”到“b1”,
- 从“b.1”到“b1”。
现在,我正在执行两个 UPDATE 语句:
UPDATE tbl SET title='a1' WHERE title IN ('a-1', 'a.1')
UPDATE tbl SET title='b1' WHERE title IN ('b-1', 'b.1')
这根本不是问题,如果表很小,并且单个语句在不到一秒的时间内完成,您只需要执行几条语句。
您可能是客串了它 - 我有一个巨大的表要处理(一个语句在大约 90 秒内完成),并且我有大量的更新要执行。
那么,是否可以合并更新,使其只扫描表一次?或者,在这种情况下有更好的处理方法。
编辑:请注意,我正在使用的真实数据以及我必须执行的数据更改并不是那么简单 - 字符串更长并且它们不遵循任何模式(它是用户数据,所以不能做任何假设 - 它可以是任何东西)。
【问题讨论】:
-
因此,从您的 EDIT 注释推断,字符串本身可能不同,但您尝试的更新是否遵循模式?如果是这样,它是什么?如果没有任何东西有模式,那么就没有解决方案,您必须单独编码每个特殊更新
-
我有一个 正确 值列表,并且我有一个明确指定的 错误 值列表(并且必须将哪个错误值更改为哪个正确的值)。所以是的 - 更新确实有一个模式。简而言之 - 每次更新都会更改一个值,但前提是旧值在指定的值列表中。
标签: sql sql-server sql-server-2005 tsql optimization