web-dev-qa-db-ja.com

SQLでのスカラー値関数の呼び出し

Oracleからデータベースを移行しましたが、現在はいくつかのスカラー値関数があります。

ただし、それらを呼び出すと、次のエラーが表示されます。

列 "dbo"またはユーザー定義関数または集計 "dbo.chk_mgr"が見つからないか、名前があいまいです。

私はこのように呼んでいます:

SELECT dbo.chk_mgr('asdf')

私は何を間違えていますか?

22
Madam Zu Zu

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
20
8kb

次のことができます

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

例えば。:

PRINT dbo.StringSplit('77,54')
19
BJ Patel

その構文は私にとってうまく機能します:

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

SELECT dbo.test_func('blah')

関数は関数として、dboスキーマの下に存在しますか?

8
Tom H

インラインテーブル値関数を使用しています。したがって、Select * From機能を使用する必要があります。 select function()を使用する場合は、スカラー関数を使用する必要があります。

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

2