sql - 无限可选参数

标签 sql sql-server

本质上,我希望能够创建一个标量函数,它接受可变数量的参数并将它们连接在一起以返回单个 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)

不必在每次调用函数时都经历繁琐的设置和插入新的临时表?

最佳答案

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

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/

相关文章:

MySQL 查询问题 - 添加额外和总计

mysql - 尝试连接 3 个语句

sql - 努力避免 RBAR!如何将相关表上的插入关联为基于集合的操作?

SQL Server比较有多少数据匹配,并且只在一张表中

c# - SQL 查询没有获取所有数据 C#/ASP.net

sql - 将数据库名称与表列表相关联

php - 从两行中获取每个值的差异

sql - 我应该在 T-SQL 中使用 != 或 <> 表示不等于吗?

sql-server - 事务复制有什么用?

php - 如何使用 Wordpress salt 在 Wordpress 中加密密码?