对于所有列,在SQL中用空字符串替换NULL

时间:2016-02-17 16:33:19

标签: sql sql-server sql-server-2012

这些问题(onetwothree)都确定了如何为单个列返回空字符串而不是NULL

SELECT ISNULL(ColA,'') AS ColA FROM Table1

但是,我有一个查询返回了一大堆我不太愿意单独选择的列(不用担心 - 这不是生产查询)

SELECT * FROM Table1

有没有办法为通配符运算符返回的所有列返回空字符串?

例如,以下天真尝试无法正常工作

SELECT ISNull(*,'') FROM Table1

3 个答案:

答案 0 :(得分:1)

也许您可以使用它来生成SQL查询字符串以便动态执行它,检查这是否适合您:

;WITH cte AS ( 
SELECT 'ISNULL(' + COLUMN_NAME + ',' + 
  CASE 
    WHEN DATA_TYPE = 'bit' THEN '0'
    WHEN DATA_TYPE = 'int' THEN '0'
    WHEN DATA_TYPE = 'decimal' THEN '0'
    WHEN DATA_TYPE = 'date' THEN '''1/1/1900'''
    WHEN DATA_TYPE = 'datetime' THEN '''1/1/1900'''
    WHEN DATA_TYPE = 'uniqueidentifier' THEN '00000000-0000-0000-0000-000000000000'
    ELSE '''''' 
  END + ') AS ' + COLUMN_NAME AS columnNameIsNull 
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TableName'
)

SELECT
stuff((
    SELECT ( ', ' + columnNameIsNull )
                       FROM cte
                        FOR XML PATH( '' )
                    ), 1, 1, '' ) AS string

答案 1 :(得分:0)

如果您可以使用列选择( ALT +单击+拖动)到perform a multiline select in your query editor,为什么要编写复杂的动态SQL查询?

这样,您可以为所有列键入ISNULL( ...一次。只要确保列对齐,你就应该好好去。从SQL Server Management Studio 2012开始支持。否则只需使用Notepad ++。

答案 2 :(得分:0)

此代码将生成将 schema.table 的所有列中的所有空白值替换为 NULL 值所需的 SQL

只需将输出复制到新的查询窗口并运行即可。

DECLARE @TableName nvarchar(100) = N'YourTableName'
DECLARE @SchemaName nvarchar(100) = N'YourSchemaName'

SELECT 'UPDATE ' + @SchemaName + '.' + @TableName + ' SET ' + COLUMN_NAME + ' = NULL WHERE ' + COLUMN_NAME + ' = ''''' AS UpdateSQL
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName