如何根据同一行的另一列更新多个SQL列?

3

我正在运行 SQL Server,需要更新数百个条目。列A具有唯一值,根据这些值,我需要批量更新同一表中列B的所有不同值。本质上,我正在寻找一种以批量方式执行以下操作的方法:

UPDATE table
set column B = 'value'
where column A = 'unique value'

1
你是否已经将替换值存储在单独的表中(作为键值行)? - TT.
分享一些样本数据和期望的输出。 - Muhammad Waheed
5个回答

2

这是你期望的吗?

UPDATE table
set column B = case when column A = 5 then 'unique string' end;

0

在这里,您需要编写游标以更新同一表中的列值

BEGIN 
DECLARE c_a, c_b TEXT;
DECLARE c_ab CURSOR FOR
SELECT column_a,column_b FROM c_table;
OPEN c_ab;
LOOP
FETCH c_ab into c_ca, c_cb;
IF c_ca = "0" THEN update c_table SET column_b = "No" WHERE column_a = c_ca; END IF;
IF c_ca = "1" THEN update c_table SET column_b = "Yes" WHERE column_a = c_ca; END IF;
END LOOP;
CLOSE c_ab; END

工作并经过测试的代码[请参考一些游标教程以根据您的条件进行更新],并且您可以快速批量更新表格。


0

感谢 @Jim Macaulay。这样做就可以了。谢谢其他所有人的建议。


0

这样怎么样:

update table set
columnB = concat('unique ', columnA)

根据您的需要,您可能需要或不需要 where 子句。


0

如果你有数百个值,最好将{唯一值-更新值}映射定义在单独的表中,正如TT所要求的那样。但是,如果你愿意在UPDATE语句中硬编码这些映射:

UPDATE t
SET B = CASE A
        WHEN 'unique value1' THEN 'value1'
        WHEN 'unique value2' THEN 'value2'
        WHEN 'unique value3' THEN 'value3'
        ELSE 'Unknown'
    END
FROM table t

顺便说一下,上面只是针对3种映射的。


谢谢TT和Tony。我尝试了以下内容,但出现了语法错误:UPDATE table SET statictext = CASE WHEN phonenumber = '1111111111' THEN '测试1' WHEN phonenumber = '2222222222' THEN '测试2' ELSE '错误' END FROM table; - Chad
你遇到了什么错误?另外,你使用的是哪个版本的SQL Server? - Tony Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接