我已经定义了一个带有11个参数的表值函数X
。他们的类型包括nvarchar(30)
,nvarchar(30)
,datetime
,datetime
,nvarchar(15)
,nvarchar(4)
,xml
,nvarchar(8)
,nvarchar(80)
,bit
和bit
。这适用于Microsoft SQL Server 2012.当我使用
select * from
X('A','B','2014-01-01','2014-12-31',null,null,'<C><D>E</D></C>',null,null,1,0)
我遇到了这个错误:
Parameters were not supplied for the function X
显然不同于以下两个:
An insufficient number of arguments were supplied for the procedure or function X
Procedure or function X has too many arguments specified.
这与两个预期的参数值是null
有关吗?如何克服该问题并定义/调用表值函数,例如具有11个参数的函数,其中一些参数可能带有null
?
更新如果我传入任意字符串而不是null
,问题仍然存在。所以必须有另一个(也许是愚蠢的)错误。
答案 0 :(得分:4)
定义与您描述的函数类似的函数的正确方法如下:
CREATE FUNCTION X
(
-- Add the parameters for the function here
@a nvarchar(30),
@b nvarchar(30),
@c datetime,
@d datetime,
@e nvarchar(15),
@f nvarchar(4),
@g xml,
@h nvarchar(8),
@i nvarchar(80),
@j bit,
@k bit
)
RETURNS
@output TABLE
(
-- Add the column definitions for the TABLE variable here
data nvarchar(250)
)
AS
BEGIN
INSERT INTO @output (data)
VALUES (@a + @b)
RETURN
END
GO
鉴于上述定义,请:
select * from
X('A','B','2014-01-01','2014-12-31',null,null,'<C><D>E</D></C>',null,null,1,0)
产生以下结果:
data
----
AB
答案 1 :(得分:1)
如果您的函数不需要任何参数,但是仍然出现此错误:
该功能未提供参数
class CustomFilter @Inject() (implicit val mat: Materializer) extends Filter {
def apply(nextFilter: RequestHeader => Future[Result])(requestHeader: RequestHeader): Future[Result] = {
// along with request header I want to pass a custom object
nextFilter(requestHeader)
}
}
在函数调用后尝试添加():
select * from [dbo].[myfunction]