在 SQL 中调用标量值函数

发布于 2024-12-02 07:32:14 字数 235 浏览 1 评论 0原文

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

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

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

我这样称呼它:

SELECT dbo.chk_mgr('asdf')

我做错了什么?

I have migrated a database from oracle, and now have a few Scalar-valued Functions.

However, when I call them, I get an error saying:

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.chk_mgr", or the name is ambiguous.

I'm calling it like this:

SELECT dbo.chk_mgr('asdf')

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

荭秂 2024-12-09 07:32:14

您确定它不是表值函数吗?

我问的原因:

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

Are you sure it's not a Table-Valued Function?

The reason I ask:

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

Result:

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.

However...

SELECT * FROM dbo.chk_mgr('asdf') 

mgr_name
------------------
pointy haired boss
何止钟意 2024-12-09 07:32:14

可以执行以下

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

操作例如:

PRINT dbo.StringSplit('77,54')

Can do the following

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

E.g.:

PRINT dbo.StringSplit('77,54')
つ低調成傷 2024-12-09 07:32:14

该语法对我来说效果很好:

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

SELECT dbo.test_func('blah')

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

That syntax works fine for me:

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

SELECT dbo.test_func('blah')

Are you sure that the function exists as a function and under the dbo schema?

皇甫轩 2024-12-09 07:32:14

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

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

You are using an inline table value function. Therefore you must use Select * From function.
If you want to use select function() you must use a scalar function.

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

彼岸花ソ最美的依靠 2024-12-09 07:32:14

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

Make sure you have the correct database selected. You may have the master database selected if you are trying to run it in a new query window.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文