Mic*_*l A 1 sql t-sql sql-server sql-server-2005 sql-server-2008
在过去的几个月中,我不得不将'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''
Run Code Online (Sandbox Code Playgroud)
基本上我想知道是否有更好的方法可以做到这一点?理想情况下,我可以自动将isnull应用于查询中返回的所有列(不使用两个查询).
例如:
我想采取如下查询:
select *
from tablename
Run Code Online (Sandbox Code Playgroud)
并且对于*返回的每个列,将null结果替换为0,而不必为每列写入isnull()行.
编辑:
将以一种观点来实现这一点(doh,应该想到这一点).对于兴趣/教育,有没有办法用代码做这样的事情呢?
您可以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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1752 次 |
| 最近记录: |