提问人:Guillaume D 提问时间:9/7/2023 最后编辑:MureinikGuillaume D 更新时间:9/7/2023 访问量:216
找不到列“dbo”或用户定义的函数 [已关闭]
Cannot find either column "dbo" or the user-defined function [closed]
问:
我创建以下功能
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”,或者名称不明确。
你能解释一下我的函数定义有什么问题吗?
答:
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。您需要更改参数定义并使用适当的长度。varchar
varchar(1)
varchar(30)
CAST()
CONVERT()
评论
SELECT * FROM dbo.fn_test_Select('test')
varchar
varchar(1)