在过去的几个月中,我不得不将'null'字段替换为'0'到查询返回的每一列。
节省了大量时间(其中一些返回了大量列)我一直在使用以下内容,然后将相关列的结果粘贴到新查询中:
select ', isnull(' + COLUMN_NAME + ', 0)' + ' as ' + COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'summary_by_scca_sales_category '
and TABLE_SCHEMA = 'property''
基本上我想知道是否有更好的方法可以做到这一点?理想情况下,我可以自动将isnull应用于查询中返回的所有列(不使用两个查询)。
例如:
我想采取如下查询:
select *
from tablename
对于*返回的每一列,将null结果替换为0,而不必为每列写一个isnull()行。
修改:
用视图完成这个(doh,应该想到这个)。对于兴趣/教育,有没有办法用代码做这样的事情?
答案 0 :(得分:7)
您可以针对相关表创建VIEW
,其中设置了您想要的ISNULL
逻辑。然后对视图的查询将返回您想要的数据。
编辑:
根据要求,一些示例代码可自动完成VIEW
的创建。这非常粗略,但对于只有在它工作时才需要运行的东西。注意类型问题(你声明一切都应该转化为0所以我假设你的所有列都是合适的数字类型):
DECLARE @table_def varchar(max)
SET @table_def = 'CREATE VIEW <tname>_NoNull AS SELECT '
SELECT @table_def = REPLACE(@table_def, '<tname>', t.name) +
'ISNULL(' + c.name + ', 0) AS ' + c.name + ', '
FROM sys.tables t
INNER JOIN sys.columns c ON t.object_id = c.object_id
WHERE t.name = <<table name>>
SELECT @table_def