sql - 错误 SQL Server 2012 : Parameters were not supplied for the function X

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

我已经定义了一个表值函数 X,它有 11 个参数。它们的类型是nvarchar(30), nvarchar(30), datetime, datetime, nvarchar( 15), nvarchar(4), xml, nvarchar(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,问题仍然存在。所以肯定还有另一个(也许是愚蠢的)错误。

最佳答案

定义函数的正确方法如下:

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

关于sql - 错误 SQL Server 2012 : Parameters were not supplied for the function X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781254/

相关文章:

mysql - 对平面表的查询结果进行排序

sql - 如何将值插入到 sql server 2000、2005、2008 中的表中?

php - 仅选择具有相关模型的模型或具有相关模型的后代模型

sql-server - 非数字索引的表现

sql-server - 为什么日期时间转换超出范围 999 毫秒?

sql-server - 在包含更新语句和 CTE 的存储过程中使用 Begin tran

sql - 在 SQL Server 中连接 2 个数字

php - 查询以在表中的间隔内计数

sql-server - 如何重命名sql server 2012实例名称独立服务器配置

sql-server - VS 2017 无法部署 SSIS SQL Server 2012