数据库环境:SQL SERVER 2005
有时候,想将查询查询数来的数据格式化一下,不希望显示NULL值,或者复制表的数据时,被插入的表不允许有NULL。
我们可以通过ISNULL()函数或者COALESCE()函数对数据进行转换。
如果要转换的字段太多,不想一个个字段去转,是否有什么办法批量转换NULL值呢?
实现思路:
我们通过系统表sys.all_columns关联sys.types表找到某个表的所有字段及其类型,如果该字段是允许NULL的,则进行转换。
转换规则:如果是数值类型,则将NULL转换成0,否则,转换成空字符串。
下面是SQL实现,已经将它封装到表变量中,需要的时候直接传个表名进去调用即可。
View Code
有一张testdemo表,表结构的定义语句如图1:
执行SQL语句 “SELECT dbo.f_null_cast('testdemo') AS sql_text”,得到转换的结果如图2,图2的SQL是我用格式化工具
调整格式后的结果。