【问题标题】:Variable argument in SQL functionsSQL 函数中的变量参数
【发布时间】:2022-01-04 10:07:06
【问题描述】:

我用 SQL 写了这段代码:

create function addition
    (@a decimal, @b decimal)
returns decimal as
begin
    declare @return decimal

    set @return = @a + @b

    return @return
end

这个函数只接受两个参数。

我想创建一个接受多个参数/参数的函数,例如concat() 处理多个参数。

有办法实现吗?

【问题讨论】:

  • 您使用的是哪个 dbms? (上面的代码是特定于产品的。)
  • 对于 SQL Server,您可能希望使用 table-valued parameter。但正如 jarlh 所说,答案将取决于您使用的 DBMS,并且可能还取决于特定版本。

标签: sql function parameters


【解决方案1】:

尚未发现是否可以在 Sql Server 中创建一个可以接受任意数量参数的 UDF。就像CONCAT 一样。 (可能是 CLR 函数???)

但这里有 2 个替代方案的示例

A) 创建一个表类型。并在 UDF 中使用它

CREATE TYPE dbo.[NumsType] AS TABLE(
    [n] [int] NOT NULL
);
CREATE FUNCTION udf_sumNums (@nums dbo.NumsType readonly) 
RETURNS INT AS
BEGIN
    DECLARE @n INT;
    SELECT @n = sum(n) FROM @nums;
    RETURN @n;
END;
GO
declare @mynums as dbo.NumsType;

insert into @mynums values (1),(2),(3),(4),(5);

select dbo.udf_sumNums(@mynums) as sums
|总和| | ---: | | 15 |

B) 将一个字符分隔的字符串提供给 UDF。然后拆分字符串。

CREATE FUNCTION udf_sumNumString (@numString varchar(max)) 
RETURNS INT AS
BEGIN
    DECLARE @result INT;
    
    SELECT @result = SUM(TRY_CAST(value as int)) 
    FROM string_split(@numString,',');
    
    RETURN @result;
END;
select dbo.udf_sumNumString('1,2,3,4,5') as sums
|总和| | ---: | | 15 |

db小提琴here

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2021-12-09
    相关资源
    最近更新 更多