专注SQL实现、优化 自定义函数实现NULL值替换
来源:互联网 发布:破解版的软件 编辑:程序博客网 时间:2024/05/22 09:03
数据库环境:SQL SERVER 2005
有时候,想将查询查询数来的数据格式化一下,不希望显示NULL值,或者复制表的数据时,被插入的表不允许有NULL。
我们可以通过ISNULL()函数或者COALESCE()函数对数据进行转换。
如果要转换的字段太多,不想一个个字段去转,是否有什么办法批量转换NULL值呢?
实现思路:
我们通过系统表sys.all_columns关联sys.types表找到某个表的所有字段及其类型,如果该字段是允许NULL的,则进行转换。
转换规则:如果是数值类型,则将NULL转换成0,否则,转换成空字符串。
下面是SQL实现,已经将它封装到表变量中,需要的时候直接传个表名进去调用即可
ALTER FUNCTION [dbo].[f_null_cast] ( @table_name VARCHAR(20)--表名 )RETURNS VARCHAR(MAX)AS BEGIN DECLARE @sql_text VARCHAR(MAX); WITH x0 AS ( SELECT TOP 200 ',' + CASE WHEN c.is_nullable = 0 THEN c.name WHEN t.name IN ( 'smallint', 'int', 'decimal' ) THEN 'ISNULL(' + c.name + ',0) as ' + c.name ELSE 'ISNULL(' + c.name + ','''') as ' + c.name END AS name_column FROM sys.all_columns AS c , sys.types AS t WHERE c.system_type_id = t.system_type_id AND t.name <> 'sysname' AND c.object_id = OBJECT_ID(@table_name) ORDER BY c.column_id--根据字段创建的先后顺序排序 ) SELECT @sql_text = 'select ' + STUFF(( SELECT name_column + '' FROM x0 FOR XML PATH('') ), 1, 1, '') + ' from ' + @table_name RETURN @sql_text END
有一张testdemo表,表结构的定义语句如图1:
执行SQL语句 “SELECT dbo.f_null_cast('testdemo') AS sql_text”,得到转换的结果如图2,图2的SQL是我用格式化工具
调整格式后的结果。
0 0
- 专注SQL实现、优化 自定义函数实现NULL值替换
- 自定义函数实现NULL值替换
- SQL中ISNULL函数的用法-使用指定的替换值替换 NULL
- LoadRunner中自定义C函数实现字符串替换
- SQL自定义函数实现时间转换
- SQL NULL 值、SQL NULL 函数
- SQL替换NULL值的显示
- SQL替换NULL
- SQL---count()函数结果为null时替换为0
- JNI_OnLoad实现动态函数替换
- SQL实现自定义排序
- 自定义classloader实现JAVA热替换
- NHibernate 如何实现使用sql自定义的函数
- Mysql自定义函数IsNums实现sql server isNumeric
- sql自定义函数实现字符串分割Split()功能
- 自定义实现GetProcAddress函数
- 实现自定义memcpy函数
- freemaker自定义函数实现
- Index downloads are disabled, search results may be incomplete.
- DMA方式的网卡驱动
- SQL模糊查询语句和Escape转义字符
- 持久化存储
- .NET基础--异常处理
- 专注SQL实现、优化 自定义函数实现NULL值替换
- js的url传值中文乱码问题
- iOS中app启动闪退的原因
- Unity游戏开发—休闲类(有源代码)
- javascript格式化json显示
- solr的一些查询参数
- VC2008 Windows Media Player控件的使用技巧(三)
- Android_Studio的学习1--下载和安装
- Samza的Task是如何运行在Yarn上的