自定义函数实现NULL值替换

时间:2022-01-07 05:30:46

数据库环境: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:

aaarticlea/png;base64,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" alt="" />

  执行SQL语句 “SELECT dbo.f_null_cast('testdemo') AS sql_text”,得到转换的结果如图2,图2的SQL是我用格式化工具

调整格式后的结果。

aaarticlea/png;base64,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" alt="" />