无限可选参数

时间:2013-08-30 09:53:15

标签: sql sql-server

本质上,我希望能够创建一个标量函数,该函数接受可变数量的参数并将它们连接在一起以返回单个VARCHAR。换句话说,我希望能够在不确定数量的变量上创建折叠,并将折叠结果作为VARCHAR返回,类似于C#中的.Aggregate或Common Lisp中的Concatenate。

这种功能的我(程序)伪代码如下:

  1. 定义VARCHAR变量
  2. foreach非null参数将其转换为VARCHAR并将其添加到VARCHAR变量
  3. 返回VARCHAR变量作为函数
  4. 的结果

    在MS-SQL中有没有一种惯用的方法可以做这样的事情? MS-SQL Server是否有类似于C#params / Common Lisp& rest关键字的东西?

    - 编辑 -

    是否可以在不使用表值参数的情况下执行类似的操作,以便对函数的调用如下所示:

    MY_SCALAR_FUNC('A',NULL,'C',1)

    而不是每次调用函数时都要经历设置和插入新临时表的严格要求?

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”样式声明滚动自己的功能。