SQL Server中的多列有条件批量更新-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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 469 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做数据分析
立即下载
阿里云流计算 Flink SQL 核心功能解密
立即下载
Comparison of Spark SQL with Hive
立即下载
相关技术图谱
更多
Kubernetes 技术图谱
Kubernetes 技术图谱由 Linux Foundation 开源软件大学、马哥教育、阿里云云原生团队、阿里云开发者学堂专家联合出品,通过技术入门、Kubernetes 应知应会、Kubernetes 实践能力训练三个维度的设计,帮助云原生人才建包括理论、实践、体验的基础技能体系,提供 CKA、CKAD、ACA、ACP 等相关认证资格提供积累专业技能的基础环境。
321990
32502
去学习
大数据工程师进阶 技术图谱
从开源大数据技术(选学),到云上大数据快速应用(更便捷、更强大)
478453
97011
去学习