在SQL中调用标量值函数

Mad*_* Zu 23 sql t-sql sql-function

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

但是,当我打电话给他们时,我得到一个错误说:

找不到列"dbo"或用户定义的函数或聚合"dbo.chk_mgr",或者名称不明确.

我这样称呼它:

SELECT dbo.chk_mgr('asdf')
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

8kb*_*8kb 21

你确定它不是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
Run Code Online (Sandbox Code Playgroud)

结果:

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.
Run Code Online (Sandbox Code Playgroud)

然而...

SELECT * FROM dbo.chk_mgr('asdf') 

mgr_name
------------------
pointy haired boss
Run Code Online (Sandbox Code Playgroud)


BJ *_*tel 19

PRINT dbo.[FunctionName] ( [Parameter/Argument] )
Run Code Online (Sandbox Code Playgroud)

例如:

PRINT dbo.StringSplit('77,54')
Run Code Online (Sandbox Code Playgroud)


Tom*_*m H 9

该语法对我来说很好:

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

SELECT dbo.test_func('blah')
Run Code Online (Sandbox Code Playgroud)

您确定该函数作为函数存在并且在dbo架构下吗?