2013-08-30 35 views
1

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

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

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

在MS-SQL中是否有这样的地道方式? MS-SQL Server有类似于C#params/Common Lisp & rest关键字吗?

- 编辑 -

是否有可能做类似这样的不使用表值参数的东西,这样对函数的调用可能看起来像:

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

而不是每次调用该函数时都必须经过设置和插入到新的临时表中。

回答

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”风格的声明无法实现自己的功能。

+0

对不起,我应该更清楚。我特别希望避免使用表值参数,我会更新问题以使其更清晰。 –

+0

@BenH我编辑了一个选项,只适用于字符串连接,并且只在SQL 2012上有帮助吗? – Meff

+0

这确实有帮助,谢谢Meff。这让我想知道他们是如何实现这个功能的。我们并没有将2012用于这个特定的项目,但我们对其他人并不了解,因此谢谢。 –