29

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

但是,当我打电话给他们时,我收到一条错误消息:

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

我这样称呼它:

SELECT dbo.chk_mgr('asdf')

我究竟做错了什么?

4

5 回答 5

26

你确定它不是一个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
于 2011-09-02T03:45:37.923 回答
20

可以做以下

PRINT dbo.[FunctionName] ( [Parameter/Argument] )

例如:

PRINT dbo.StringSplit('77,54')
于 2012-08-08T07:56:49.620 回答
11

该语法对我来说很好:

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

SELECT dbo.test_func('blah')

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

于 2011-09-01T19:33:24.840 回答
2

您正在使用内联表值函数。因此,您必须使用 Select * From 函数。如果要使用 select function(),则必须使用标量函数。

https://msdn.microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx

于 2015-08-04T08:05:47.807 回答
-1

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

于 2016-04-28T14:38:57.287 回答