簡體   English   中英

SQL Server 中多列的條件批量更新

[英]Conditional Bulk Update in SQL Server for multiple columns

我正在嘗試更新幾十萬行,其中兩列具有特定值(“xxx”)。

ID | firstname  | lastname
----------------
1  |  John      | xxx
2  |  xxx       | Scheving
3  |  Agnes     | xxx
4  |  Luke      | Borden
5  |  Kayla     | Borden
6  |  Finnick   | Wayne
7  |  xxx       | xxx

我需要分批進行,以免完全鎖定表。 目前,我的查詢看起來像這樣

SET NOCOUNT ON;
DECLARE @rows INT, @count INT, @message VARCHAR(100);
SET @rows = 1;
SET @count = 0;

WHILE @rows > 0
BEGIN
    BEGIN TRAN
         UPDATE TOP (2000) people
         SET firstname= CASE firstname WHEN 'xxx' THEN 'N/A' ELSE firstname  END,
         lastname= CASE lastname WHEN 'xxx' THEN 'N/A' ELSE lastname END

        SET @rows = @@ROWCOUNT
        SET @count = @count + @rows
        RAISERROR('COUNT %d', 0, 1, @count) WITH NOWAIT
    COMMIT TRAN
END

但是我擔心這個查詢的性能,或者更新這些列是否比使用案例更容易。

我沒有看到同時更新兩列的價值,所以我建議如下:

update people
    set firstname = 'N/A'
    where firstname = 'XXX';

update people
    set lastname = 'N/A'
    where lastname = 'xxx';

如果你想把這些放在循環中,那么你可以重復:

declare @reccnt int;
set @reccent = 1;

while @reccnt > 0
begin
    update top (2000) people
        set firstname = 'N/A'
        where firstname = 'XXX';

    set @reccnt = @@ROWCOUNT;
end;

以及姓氏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM