创建dbo.fn_test_Select表值函数后调用报错,求排查函数定义问题
表值函数执行报错的问题分析
你创建的内联表值函数代码如下:
CREATE OR ALTER FUNCTION dbo.fn_test_Select (@mat varchar) RETURNS TABLE AS RETURN SELECT * from zMatnrJson where matnr = @mat
执行以下语句时触发错误:
SELECT dbo.fn_test_Select('test')
错误信息:
Msg 4121, Level 16, State 1, Line 9
Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fn_test_Select", or the name is ambiguous.
问题分析
调用语法错误(直接触发报错的原因)
内联表值函数的调用逻辑和标量函数不同,不能直接用SELECT 函数名()的形式调用。你需要将其当作一张表来查询,正确的调用语法为:SELECT * FROM dbo.fn_test_Select('test');若需要和其他表关联查询,也可使用
CROSS APPLY或OUTER APPLY语法。参数定义的潜在问题
函数参数@mat varchar未指定长度,在SQL Server中,未声明长度的varchar默认长度为1。当你传入'test'时,参数值会被截断为单个字符't',即便调用语法正确,查询结果也会不符合预期。建议根据实际业务需求指定合适的长度,示例:CREATE OR ALTER FUNCTION dbo.fn_test_Select (@mat varchar(50))
内容的提问来源于stack exchange,提问作者Guillaume D
相关产品推荐
相关产品推荐

