我们有一个包含大量宽表(每个表 40-80 列)的数据库,并且刚刚发现一个错误,该错误将 NULL 值引入到大约 500 条记录中。 NULL 值可以出现在任何列中(所有列都是整数列,请参见下图),但这些 NULL 值会导致我们的报告系统之一出现无法轻松更改的问题。我们需要将 NULL 值替换为特定的静态值(在本例中为 99),但由于必须针对超过 250 个不同的列逐列进行此更改,因此我宁愿不编写单独的 TSQL 脚本来更新每一列一个。
我的大脑现在太混乱了,无法想出一个聪明的解决方案,所以我的问题是如何使用简单且可读的 SQL 查询对表(或者更好的是多个表)上的所有列执行此任务。我可以使用一系列很容易地隔离记录WHERE (Answer_1 IS NULL) OR (Answer_2 IS NULL) OR ...
或者甚至通过每个表的 AdministrationID 编号,但是当更新时此技巧将不起作用,因为 where 子句是每行而不是每列。有什么建议吗?
Here is a sample query showing a few of the records from 4 different tables:
对此没有任何约定——如果您只想处理相应列为 NULL 的记录,则需要使用:
WHERE Answer_1 IS NULL
OR Answer_2 IS NULL
OR ...
但您可以在 UPDATE 语句中使用它:
UPDATE YOUR_TABLE
SET col1 = COALESCE(col1, 99),
col2 = COALESCE(col2, 99),
col3 = ...
其逻辑是,仅当列值为 NULL 时,该值才会更新为 99,因为 COALESCE 的工作原理是返回第一个非 NULL 值(处理从左到右提供的列表)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)