SQL Server自定义函数返回nvarchar时,如何保留'00'而非返回0?
解决函数返回'00'而非0的问题
嘿,这个问题我之前也碰到过!问题根源在你函数的返回类型定义上:你写的RETURNS nvarchar没有指定长度,在SQL Server中,这种写法默认会使用**nvarchar(1)**作为返回类型。这就导致当ParameterValue是'00'时,函数只能返回第一个字符'0',而在查询结果里,这个单个字符的字符串'0'又会被隐式转换成数值0显示出来。
修正后的函数代码
只需要把返回类型改成nvarchar(50)(和你定义的@return变量长度保持一致)即可:
ALTER FUNCTION [dbo].[GetSystemParameter] ( @Parameter nvarchar(50) ) RETURNS nvarchar(50) -- 这里补充指定返回类型的长度 AS BEGIN DECLARE @return nvarchar(50) SELECT @return = [ParameterValue] FROM dbo.[SystemParameters] WHERE [ParameterName] = @Parameter RETURN @return END
验证修改效果
修改完成后,你可以用下面的查询确认返回的是字符串类型的'00':
SELECT '''' + dbo.GetSystemParameter('<ParameterName>') + ''''
如果返回结果是'00',就说明问题已经解决啦。
另外,如果你想彻底避免隐式转换的干扰,也可以在调用函数时显式指定类型:
SELECT CAST(dbo.GetSystemParameter('<ParameterName>') AS nvarchar(50))
不过最根本的解决方式还是修正函数本身的返回类型长度哦。
内容的提问来源于stack exchange,提问作者Benzie
相关产品推荐
相关产品推荐

