3

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

我对此类函数的(程序)伪代码如下:

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

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

- 编辑 -

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

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

而不是每次调用函数时都必须经历设置和插入新临时表的麻烦?

4

1 回答 1

2

对于一组项目,您可以考虑将值表传递给您的函数吗?

将表作为参数传递到 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”样式声明滚动您自己的函数。

于 2013-08-30T09:58:06.520 回答