我正在尝试更新数十万行,其中两列具有特定值('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';
如果要将它们放入循环中,则可以重复以下操作:
```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;```
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。