Вызов скалярных функций в SQL

Я перенес базу данных из oracle и теперь имею несколько скалярных функций.

однако, когда я вызываю их, я получаю сообщение об ошибке:

Не удается найти столбец " dbo "или пользовательскую функцию или агрегат" dbo.chk_mgr", или имя неоднозначно.

Я называю это так:

SELECT dbo.chk_mgr('asdf')

что я делаю не так?

5 ответов


вы уверены, что это не 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

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

например:

PRINT dbo.StringSplit('77,54')

этот синтаксис работает для меня:

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

SELECT dbo.test_func('blah')

вы уверены, что функция существует как функция и в схеме dbo?


вы используете встроенную функцию табличного значения. Поэтому вы должны использовать функцию Select * From. Если вы хотите использовать select function (), вы должны использовать скалярную функцию.

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


убедитесь, что выбрана правильная база данных. База данных master может быть выбрана, если вы пытаетесь запустить ее в новом окне запроса.