使用列级WHERE子句更新多列中的所有SQL NULL值?

我们有一个包含大量宽表(每个40-80列)的数据库,并且发现了一个将NULL值引入大约500条记录的错误. NULL值可以出现在任何列中(都是整数列,请参见下图),但这些NULL值导致我们的报告系统之一无法轻易更改.我们需要用特定的静态值(在本例中为99)替换NULL值,但由于这个更改必须基于每列超过250个不同的列,我宁愿不编写更新每个列的单个Tsql脚本一个人.

我的大脑现在太过于思考一个聪明的解决方案,所以我的问题是如何使用简单易读的SQL查询在表上的所有列(或更好的多个表)上执行此任务.我可以使用一个WHERE链(Answer_1 IS NULL)或(Answer_2 IS NULL)或者……甚至每个表的AdministrationID编号来容易地隔离记录,但是当更新为where子句时,这个技巧将不起作用每列不行.任何建议?

以下是一个示例查询,显示了来自4个不同表的一些记录:

解决方法

对此没有任何约定 – 如果您只想处理各列为NULL的记录,则需要使用:
WHERE Answer_1 IS NULL 
   OR Answer_2 IS NULL 
   OR ...

但您可以在UPDATE语句中使用它:

UPDATE YOUR_TABLE
   SET col1 = COALESCE(col1,99),col2 = COALESCE(col2,col3 = ...

逻辑是,只有当列值为NULL时,该值才会更新为99,因为COALESCE的工作方式 – 返回第一个非NULL值(处理从左到右提供的列表).

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...