这些问题(one,two,three)都确定了如何为单个列返回空字符串而不是NULL
:
SELECT ISNULL(ColA,'') AS ColA FROM Table1
但是,我有一个查询返回了一大堆我不太愿意单独选择的列(不用担心 - 这不是生产查询)
SELECT * FROM Table1
有没有办法为通配符运算符返回的所有列返回空字符串?
例如,以下天真尝试无法正常工作:
SELECT ISNull(*,'') FROM Table1
答案 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