错误SQL Server 2012:未为函数X提供参数

时间:2014-11-06 13:56:19

标签: sql sql-server sql-server-2012 stored-functions

我已经定义了一个带有11个参数的表值函数X。他们的类型包括nvarchar(30)nvarchar(30)datetimedatetimenvarchar(15)nvarchar(4)xmlnvarchar(8)nvarchar(80)bitbit。这适用于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,问题仍然存在。所以必须有另一个(也许是愚蠢的)错误。

2 个答案:

答案 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]