找不到列“dbo”或用户定义的函数 [已关闭]

Cannot find either column "dbo" or the user-defined function [closed]

提问人:Guillaume D 提问时间:9/7/2023 最后编辑:MureinikGuillaume D 更新时间:9/7/2023 访问量:216

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

3个月前关闭。

我创建以下功能

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') 

返回以下错误

消息 4121,级别 16,状态 1,第 9 行 找不到列“dbo”或用户定义的函数或聚合“dbo.fn_test_Select”,或者名称不明确。

你能解释一下我的函数定义有什么问题吗?

sql sql-server 函数 选择

评论

3赞 Zhorov 9/7/2023
您需要一个语句,例如当 UDF 返回表时。SELECT * FROM dbo.fn_test_Select('test')
4赞 Martin Smith 9/7/2023
也没有任何长度等同于在此上下文中varcharvarchar(1)
0赞 Guillaume D 9/7/2023
太明显了......我累了!谢谢

答:

1赞 Mureinik 9/7/2023 #1

您定义的函数返回查询,而不是标量。您需要从中查询,而不是将其作为列:

SELECT * 
FROM   dbo.fn_test_Select('test')
1赞 Zhorov 9/7/2023 #2

您已经定义了一个表值函数,因此您只需要一个不同的语句即可获得预期的结果。SELECT

SELECT *
FROM dbo.fn_test_Select('test') 

实际语句使用标量值函数的结果,这就是返回错误消息的原因。此外,正如注释中提到的@MartinSmith,不带长度的使用等于使用数据定义或变量声明语句时,并且等于 in 和 functions。您需要更改参数定义并使用适当的长度。varcharvarchar(1)varchar(30)CAST()CONVERT()