开发者社区> 问答> 正文

SQL Server中的多列有条件批量更新

我正在尝试更新数十万行,其中两列具有特定值('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

但是我担心此查询的性能,或者是否比使用案例更容易更新这些列。

展开
收起
祖安文状元 2020-01-03 16:05:08 534 0
1 条回答
写回答
取消 提交回答
  • 我看不到同时更新两个列的价值,所以我建议这样:

    update people
        set firstname = 'N/A'
        where firstname = 'XXX';
    
    update people
        set lastname = 'N/A'
        where lastname = 'xxx';
    
    如果要将它们放入循环中,则可以重复以下操作:
    
    ```js
    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;```
    
    2020-01-03 16:05:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载