是否有更好的方法将isnull应用于所有列而不是我正在做的事情?

时间:2011-12-27 15:26:20

标签: sql sql-server sql-server-2008 sql-server-2005 tsql

在过去的几个月中,我不得不将'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,应该想到这个)。对于兴趣/教育,有没有办法用代码做这样的事情?

1 个答案:

答案 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