我有成千上万条记录,我需要以350条记录的批次进行更新。

我想知道以下两个更新语句之间是否有任何区别,并且其中之一是否可以更快地工作,使用更少的数据库资源等。

陈述1:

UPDATE TOP (350) database1
SET value1 = '', value2 ='', value3 = ''
WHERE value1 = '123'


陈述2:

    UPDATE database1
    SET value1 = '', value2 ='', value3 = ''
    WHERE ID in
       (SELECT TOP 350 ID FROM database1
       WHERE value1 = '123')

最佳答案

首先声明会更快。但是前150条记录是随机选择的。两个查询中更新的记录可能不相同。由于您将更新分批进行,因此您的方法可能不会更新所有记录。

我将使用与您的方法一致的方法来执行此操作。

;WITH cte
     AS (SELECT TOP (350) value1,
                          value2,
                          value3
         FROM   database1
         WHERE  value1 = '123'
         ORDER  BY ID -- or any other column to order the result
        )
UPDATE cte
SET    value1 = '',
       value2 = '',
       value3 = ''


另外,在更新几千条记录时,您不必担心事务日志的大小,这里不需要批处理

关于sql - SQL UPDATE TOP()或SELECT TOP UPDATE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41977698/

10-10 03:32