[英]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.