SQL UPDATE TOP () 或使用 SELECT TOP 进行更新

问题描述 投票:0回答:3

我有几千条记录,我需要分批更新它们,每批更新 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')
sql sql-server sql-update
3个回答
7
投票

第一个语句会更快。但前 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 = '' 

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


0
投票

从database1中过滤数据,然后通过id加入。下面的方法对于选择和更新数据来说更现实。

UPDATE database1 
    SET value1 = '', value2 ='', value3 = ''
    FROM (
        SELECT top 350 ID
        FROM database1
        WHERE value1 = '123'
        ) as db1
    WHERE db1.ID = database1.ID

0
投票

更新顶部(1)设置 tran_status = 'DD',STATUS = 'D',其中 REFERENCE_NO = 'COMC/23-24/0000000019' 且 CD_CLIENT = 'CLNT000053'

© www.soinside.com 2019 - 2024. All rights reserved.