未为函数提供SQL Server表值函数参数-

未为函数提供SQL Server表值函数参数-,sql,sql-server,function,tsql,Sql,Sql Server,Function,Tsql,对于一个非常简单的表值函数,我经常会遇到错误:“未提供参数”。我想不出是什么问题。我将函数的范围缩小到: create FUNCTION udf_XX_OddFCST() RETURNS @output TABLE ( articlecode nvarchar(50) ) AS BEGIN insert into @output(articlecode) values ('abc'); RETURN END 所以我在执行时得到了错误 select

对于一个非常简单的表值函数,我经常会遇到错误:“未提供参数”。我想不出是什么问题。我将函数的范围缩小到:

create FUNCTION udf_XX_OddFCST()
    RETURNS @output TABLE (
        articlecode nvarchar(50)
    )
AS
BEGIN
    insert into @output(articlecode) values ('abc');
    RETURN
END
所以我在执行时得到了错误

select * from udf_XX_OddFCST
任何帮助都将不胜感激


您需要在函数调用中使用括号:

SELECT * FROM udf_XX_OddFCST()
然而,正如评论中提到的,使用iTVF将更简单、更有效:

CREATE FUNCTION udf_XX_OddFCST()
RETURNS TABLE
AS
    RETURN (select 'abc' as articlecode)

SELECT * FROM udf_XX_OddFCST()

函数后面有参数:
来自udf\u XX\u OddFCST()
。另外,我真的建议将上面的多行表值函数更改为内联表值函数;他们快多了。嗨,谢谢你的帮助。如果我查看文档,应该可以添加零输入参数。即使我添加虚拟参数,我也会遇到同样的问题。我尝试了内联表函数,但在那个里我不能使用动态SQL。我需要动态SQL来构建我的语句并以表的形式返回输出。是的,您可以没有参数,但仍然需要包含参数的参数。所有函数都要求参数贴花,即使它们没有。不是
选择GETDATE它是
选择GETDATE()
。在您的例子中,它不是
udf_XX_OddFCST
而是
udf_XX_OddFCST()
“我尝试了内联表函数,但在那里我不能使用动态SQL。”多行表值函数也不能使用动态SQL;任何函数都不能。如果您需要动态SQL,您需要使用一个存储过程,它的工作方式非常不同。谢谢您的反馈。使用()有效,但我得到的信息是,我不能使用sp_excecutesql。我确实知道存储过程是如何工作的。我的目标实际上是在一个我可以轻松查询的表中使用动态sql的输出。谢谢您的帮助。不幸的是,我不能在表函数中使用动态SQL,所以我需要找到另一个解决方案,但再次感谢!我想你指的是硬编码的值,不管怎样,这就是你给我们展示的。我的回答基于您提供的信息,是的,非常感谢您的反馈。我对这个简化版本有了答案,这一事实帮助我解决了另一个问题。太好了,很高兴我帮了忙