SQL Server:用户定义的函数参数

SQL Server:用户定义的函数参数,sql,sql-server,tsql,user-defined-functions,sqldatatypes,Sql,Sql Server,Tsql,User Defined Functions,Sqldatatypes,我想知道是否有可能创建一个用户定义的函数,它可以接受不同长度的参数(以及其他参数) 本质上,我希望传递一个参数,然后在语句中使用该参数。我想做的是这样的: CREATE FUNCTION ufnGetOpenNotificationValue (@LegacyTypeID INT, @MonthEnd DATE, @YearStart DATE, @YearEnd DATE) SELECT RE_Auxiliary.dbo.ufnGetOpenNo

我想知道是否有可能创建一个用户定义的函数,它可以接受不同长度的参数(以及其他参数)

本质上,我希望传递一个参数,然后在语句中使用该参数。我想做的是这样的:

CREATE FUNCTION ufnGetOpenNotificationValue 
    (@LegacyTypeID INT, 
     @MonthEnd DATE, 
     @YearStart DATE, 
     @YearEnd DATE)
SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
('1,2,3','2014-07-31','2013-09-01','2014-08-31')
其中
@LegacyTypeID
是整数列表

那么使用这个函数可能看起来像这样

SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
    ((1,2,3),'2014-07-31','2013-09-01','2014-08-31')
而不是

SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
        (1,'2014-07-31','2013-09-01','2014-08-31') + 
    RE_Auxiliary.dbo.ufnGetOpenNotificationValue
        (2,'2014-07-31','2013-09-01','2014-08-31') + 
    RE_Auxiliary.dbo.ufnGetOpenNotificationValue
        (3,'2014-07-31','2013-09-01','2014-08-31')
但是如果我尝试传递多个整数,我会得到一个错误

Incorrect syntax near ','

正如Alex K所说,不能将数组作为SQL函数的输入传递。您可以传递表类型()

然后,在使用作为参数传递的变量调用函数之前,需要将该变量插入TableType变量中

另一个选项是以逗号分隔的值列表形式传入列表。然后在where子句中使用函数()

CREATE FUNCTION ufnGetOpenNotificationValue 
(@LegacyTypeID NVARCHAR(256), 
 @MonthEnd DATE, 
 @YearStart DATE, 
 @YearEnd DATE)
...
WHERE COLUMN_NAME in (SELECT val FROM dbo.f_split(@StringParameter, ','))
你可以这样称呼它:

CREATE FUNCTION ufnGetOpenNotificationValue 
    (@LegacyTypeID INT, 
     @MonthEnd DATE, 
     @YearStart DATE, 
     @YearEnd DATE)
SELECT RE_Auxiliary.dbo.ufnGetOpenNotificationValue
('1,2,3','2014-07-31','2013-09-01','2014-08-31')

表值参数尽可能接近,例如-您不能传递可变参数。谢谢@Alex K。-我想我会坚持调用函数3次并求和,如果列表更长,我可能会考虑您提出的表方法Hanks@Alex Fletcher,创建另一个函数来拆分逗号分隔的列表似乎是一个简单的解决方案,而不像Alex K推荐的创建表值参数那样麻烦