【发布时间】:2020-05-30 04:55:29
【问题描述】:
我们从另一个表中导入了大量数据。现在我正在尝试纠正其中的一些问题。
UPDATE [x10ddata].[dbo].[ResourceTest]
SET [Country] = (CASE
WHEN [Country] IN ('Aezerbaijan', 'AZERBIJAN') THEN 'Azerbaijan'
WHEN [Country] = 'Belgique' THEN 'Belgium'
WHEN [Country] = 'China (RPC)' THEN 'China'
WHEN [Country] = 'Columbia' THEN 'Colombia'
WHEN [Country] = 'Croatia (Local Name: Hrvatska)' THEN 'Croatia'
.....//...
WHEN [Country] IN ('U.S.', 'U.S.A', 'U.S.A.', 'US', 'USA',
'USA - Maryland', 'USAQ') THEN 'United States'
END)
GO
我没有使用 ELSE,因为很多行都有有效的国家/地区。我的问题是知道我是否需要 WHERE 子句来过滤将受到影响的行?
我问这个问题的原因是,我选择了一个测试表并尝试了脚本。根据输出,所有行都受到影响,但是当我仔细检查时,并非所有行都受到影响。很混乱。
感谢您的帮助
【问题讨论】:
-
如果你想在所有行上运行更正代码,那么没有。
-
对于
CASE语句未达到指定条件之一的任何记录,NULL是CASE返回的内容,因此在这些情况下将 Country 设置为NULL. -
现在“有一个有效国家”的行是什么?
NULL?只需将ELSE [Country]包含在内,即可快速解决低效问题。 -
如果您可以正确规范您的数据,您甚至根本不需要此更新。将国家/地区名称存储在表格中,这很好地表明标准化在这里更合适。
标签: sql sql-server tsql