如何基于SQL中的原始值进行更新
我正在尝试对表进行一个非常简单的更新,我想用一个字符串替换一个大表中的另一个字符串。我正在尝试分批执行,因为表中有数亿行 但是我需要根据存在的内容以不同的方式替换字符串,但仍然满足批次号位于最新时间戳中的要求 我不想分别运行5个不同的脚本 我已经做到了这一步,但我不知道如何根据最初的情况正确应用更新 关于如何有效地做这件事有什么想法吗如何基于SQL中的原始值进行更新,sql,sql-server,performance,sql-update,Sql,Sql Server,Performance,Sql Update,我正在尝试对表进行一个非常简单的更新,我想用一个字符串替换一个大表中的另一个字符串。我正在尝试分批执行,因为表中有数亿行 但是我需要根据存在的内容以不同的方式替换字符串,但仍然满足批次号位于最新时间戳中的要求 我不想分别运行5个不同的脚本 我已经做到了这一步,但我不知道如何根据最初的情况正确应用更新 关于如何有效地做这件事有什么想法吗 DECLARE @batchsize bigint = 1000; WHILE 1 = 1 BEGIN UPDATE TOP (@batchsize)
DECLARE @batchsize bigint = 1000;
WHILE 1 = 1
BEGIN
UPDATE TOP (@batchsize) Table1
SET Row1 = 'To1' -- want to set To2, To3, To4, To5, etc. depending on what was in there already
FROM (SELECT TOP (@batchsize) Id
FROM Table1
ORDER BY TimeStamp DESC) tto
WHERE Table1.Row1 in ('From1', 'From2', 'From3', 'From4', 'From5') AND Table1.Id = tto.Id;
if @@ROWCOUNT < @batchsize
BEGIN
PRINT('All Done');
BREAK;
END;
END;
您只是在寻找一个case表达式吗
UPDATE TOP (@batchsize) Table1
SET Row1 = (CASE table1.Row1
WHEN 'From1' THEN 'To1'
WHEN 'From2' THEN 'To2'
WHEN 'From3' THEN 'To3'
WHEN 'From4' THEN 'To4'
WHEN 'From5' THEN 'To5'
END)
FROM (SELECT TOP (@batchsize) Id
FROM Table1
ORDER BY TimeStamp DESC
) tto
WHERE Table1.Row1 in ('From1', 'From2', 'From3', 'From4', 'From5') AND
Table1.Id = tto.Id;
似乎这样就可以了:
SET Row1 = CASE
WHEN Row1 = 'From1' THEN 'To1'
WHEN Row1 = 'From2' THEN 'To2'
etc
END
示例数据和期望的结果会有所帮助。是否有什么原因使您不能使用案例表达式?您没有足够详细地描述您的业务逻辑。你能告诉我们更多关于你的意思吗:我需要根据当时的情况以不同的方式替换字符串小心,如果新更新的值与以前的旧值重叠,那么它将永远不会完成。如果没有,案例可以解决替换问题。