在SQL中调用标量值函数

32

我从Oracle迁移了一个数据库,现在有一些标量值函数。

但是,当我调用它们时,会出现以下错误:

无法找到列“dbo”或用户定义的函数或聚合“dbo.chk_mgr”,或者名称不明确。

我像这样调用它:

SELECT dbo.chk_mgr('asdf')

我做错了什么?


1
你能展示一下有关该函数的CREATE语句吗? - Joe Stefanelli
2
另外,当你说你在调用它时,你是如何/从哪里调用它的?也许你在不知情的情况下指向了错误的数据库? - Tom H
我刚遇到了这个问题。@TomH的评论是正确的答案。对我来说,得票最高的答案是一个误导,因为(正如问题所述)我实际上正在使用标量值函数。 - Chris Bollinger
5个回答

28

你确定它不是一个表值函数吗?

我问这个问题的原因是:

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

20

可以做以下操作

PRINT dbo.[FunctionName] ( [Parameter/Argument] )
例如:
PRINT dbo.StringSplit('77,54')

13

那个语法对我来说很好用:

CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
    RETURN 1
END
GO

SELECT dbo.test_func('blah')

你确定该函数是存在于dbo模式下的函数吗?


SELECT * 对我也不起作用。上面的语法完美地工作了。 - PhillipPDX

2

-1

请确保您选择了正确的数据库。如果您尝试在新的查询窗口中运行它,可能已经选择了主数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接