Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 查询中的疑问-SQL Server 2005_Sql Server 2005 - Fatal编程技术网

Sql server 2005 查询中的疑问-SQL Server 2005

Sql server 2005 查询中的疑问-SQL Server 2005,sql-server-2005,Sql Server 2005,我有一个100列的表。这里最多有50到60列包含空值。现在我需要在所有50到60列中将这个空值替换为0。我尝试了更新查询,如下所示: UPDATE [tableName] SET col1=0, col2 = 0, ... col60 = 0 WHERE col1 IS NULL AND Col2 IS NULL ... Col60 IS NULL 是否有任何其他查询可以在不指定这些列的情况下更新所有60列,或者我们有任何其他方法???如果列中的每个值都为空,您可以尝试此解决方法: 编辑

我有一个100列的表。这里最多有50到60列包含空值。现在我需要在所有50到60列中将这个空值替换为0。我尝试了更新查询,如下所示:

UPDATE [tableName] 
SET col1=0, col2 = 0, ... col60 = 0 
WHERE col1 IS NULL AND Col2 IS NULL ... Col60 IS NULL

是否有任何其他查询可以在不指定这些列的情况下更新所有60列,或者我们有任何其他方法???

如果列中的每个值都为空,您可以尝试此解决方法:

  • 编辑表格定义,将列设置为“计算”,并使用0作为公式
  • 保存表格
  • 删除公式

它不是很优雅,但可以工作

我认为没有其他选择-但是您发布的查询只会更新所有列都为空的记录

如果要更新各个列,则需要将其分解为各个更新:

update table
set col1 = 0
where col 1 is null

update table
set col2 = 0
where col2 is null

必须指定所有列,但可以跳过WHERE子句,一次对所有列进行一次更新处理:

UPDATE [tableName] SET
  col1=COALESCE(col1, 0),
  col2=COALESCE(col2, 0),
  col3=COALESCE(col3, 0),
  col4=COALESCE(col4, 0),
  [...]

要避免手动编写此查询,可以使用动态SQL生成:

DECLARE @Table NVARCHAR(255)= 'Your table'
DECLARE @sSQl NVARCHAR(MAX)= 'UPDATE ' + @Table + ' SET ' + CHAR(13) ;
WITH    c AS ( SELECT   c.name
               FROM     sys.all_columns c
                        JOIN sys.tables T ON c.object_id = T.object_id
               WHERE    t.name = @Table
             )
    SELECT  @sSQl = @sSQl + c.name + '=ISNULL(' + c.name + ',0)' + ','
            + CHAR(13)
    FROM    c 
IF LEN(@sSQl) > 0 
    SET @ssql = LEFT(@sSQl, LEN(@sSQl) - 2) 

PRINT @ssql