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推荐的创建表值参数那样麻烦