本质上,我希望能够创建一个标量函数,该函数接受可变数量的参数并将它们连接在一起以返回单个VARCHAR。换句话说,我希望能够在不确定数量的变量上创建折叠,并将折叠结果作为VARCHAR返回,类似于C#中的.Aggregate或Common Lisp中的Concatenate。
这种功能的我(程序)伪代码如下:
在MS-SQL中有没有一种惯用的方法可以做这样的事情? MS-SQL Server是否有类似于C#params / Common Lisp& rest关键字的东西?
- 编辑 -
是否可以在不使用表值参数的情况下执行类似的操作,以便对函数的调用如下所示:
MY_SCALAR_FUNC('A',NULL,'C',1)
而不是每次调用函数时都要经历设置和插入新临时表的严格要求?
答案 0 :(得分:2)
对于一组项目,您可以考虑将值表传递给您的函数吗?
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”样式声明滚动自己的功能。