本质上,我希望能够创建一个标量函数,它接受可变数量的参数并将它们连接在一起以返回单个 VARCHAR。换句话说,我希望能够对不确定数量的变量创建折叠并将折叠结果作为 VARCHAR 返回,类似于 C# 中的 .Aggregate 或 Common Lisp 中的 Concatenate。
我的(程序)伪代码如下:
- 定义一个 VARCHAR 变量
- foreach非空参数将其转换为VARCHAR并添加到VARCHAR变量
- 返回 VARCHAR 变量作为函数的结果
在 MS-SQL 中有没有一种惯用的方法来做这样的事情? MS-SQL Server 是否有类似于 C# params/Common Lisp &rest 关键字的内容?
-- 编辑--
是否可以在不使用表值参数的情况下执行类似的操作,以便对函数的调用看起来像:
MY_SCALAR_FUNC('A', NULL, 'C', 1)
不必在每次调用函数时都经历繁琐的设置和插入新的临时表?
最佳答案
对于一组项目,您可以考虑将值表传递给您的函数吗?
Pass table as parameter into sql server UDF
另见 http://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx
直接回答你的问题,不,没有等同于params关键字。我将使用上面的方法 - 创建一个用户定义的表类型,为每个值填充一行,然后将其传递给您的标量函数以进行操作。
编辑:如果您想避免使用表参数,并且使用的是 SQL 2012,请查看 CONCAT 函数:
http://technet.microsoft.com/en-us/library/hh231515.aspx
CONCAT ( string_value1, string_value2 [, string_valueN ] )
这仅适用于内置的 CONCAT 函数,您不能使用“params”样式声明来滚动您自己的函数。
关于sql - 无限可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18530027/