具有标量值函数的可变长度NVARCHAR

时间:2013-03-22 22:10:31

标签: sql sql-server-2012 user-defined-functions

是否可以使用SQL Server 2012创建一个返回变量长度nvarchar的标量值函数?当我说变量长度时,我希望函数接受任意长度的nvarchar并返回相同长度的nvarchar

我正在尝试创建一个帮助函数,在将它们放入数据仓库之前使用视图清理nvarchar列。我很确定这是不可能的,如果我错了,请纠正我。

我当前的功能(显然由于截断等原因无效):

create function dbo.fnClean (@input nvarchar)
returns nvarchar as
begin
    declare @return nvarchar

    set @return = ltrim(rtrim(@input))

    return @return
end

2 个答案:

答案 0 :(得分:1)

不,这是不可能的(并且您需要动态SQL来创建列或在另一侧以这种方式转换)。但是如果事先知道长度是多少,那么你可以单独跟踪它而不是依赖于函数。或者使用返回@input AND LEN(@input)的表值函数。

最后,如果这就是这个功能所做的一切,那将会非常昂贵。只需将LTRIM(RTRIM())应用于输入而无需创建或引用函数,您从中获得了什么?标量函数对性能并不是很好。

答案 1 :(得分:0)

这不起作用,虽然我会质疑目标nvarchar或varchar已占用变量空间...我在ETL中编写了脚本,找出最大数据类型并缩放列结果。但是,如果您对数据类型和空间(特别是十进制并且没有企业的奢侈品)非常谨慎,那就是这样。你的目标是什么?