我从oracle迁移了一个数据库,现在有一些标量值函数。
然而,当我打电话给他们时,我收到一个错误说:
找不到列“dbo”或用户定义的函数或聚合“dbo.chk_mgr”,或者名称不明确。
我这样称呼它:
SELECT dbo.chk_mgr('asdf')
我做错了什么?
答案 0 :(得分:20)
你确定它不是Table-Valued Function
吗?
我问的原因是:
CREATE FUNCTION dbo.chk_mgr(@mgr VARCHAR(50))
RETURNS @mgr_table TABLE (mgr_name VARCHAR(50))
AS
BEGIN
INSERT @mgr_table (mgr_name) VALUES ('pointy haired boss')
RETURN
END
GO
SELECT dbo.chk_mgr('asdf')
GO
结果:
Msg 4121, Level 16, State 1, Line 1
Cannot find either column "dbo" or the user-defined function
or aggregate "dbo.chk_mgr", or the name is ambiguous.
然而......
SELECT * FROM dbo.chk_mgr('asdf')
mgr_name
------------------
pointy haired boss
答案 1 :(得分:15)
PRINT dbo.[FunctionName] ( [Parameter/Argument] )
E.g:
PRINT dbo.StringSplit('77,54')
答案 2 :(得分:8)
这种语法对我来说很好用:
CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.test_func('blah')
您确定该函数作为函数存在并且在dbo架构下吗?
答案 3 :(得分:2)
您正在使用内联表值函数。因此,您必须使用Select * From功能。 如果要使用select函数(),则必须使用标量函数。
https://msdn.microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx
答案 4 :(得分:-1)
确保选择了正确的数据库。如果您尝试在新的查询窗口中运行主数据库,则可以选择主数据库。