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

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

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

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

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

SELECT dbo.chk_mgr('asdf')

Что я делаю неправильно?


person Madam Zu Zu    schedule 01.09.2011    source источник
comment
Можете ли вы показать нам оператор CREATE для рассматриваемой функции?   -  person Joe Stefanelli    schedule 01.09.2011
comment
Кроме того, когда вы говорите, что звоните, как/откуда вы звоните? Может быть, вы указываете на неправильную БД, не осознавая этого?   -  person Tom H    schedule 02.09.2011
comment
У меня только что была эта проблема. Комментарий @TomH был правильным ответом. Ответ с наибольшим количеством голосов был для меня отвлекающим маневром, поскольку (как говорится в вопросе) я фактически использовал функцию со скалярным значением.   -  person Chris Bollinger    schedule 29.03.2016


Ответы (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
person 8kb    schedule 02.09.2011

Можно сделать следующее

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

E.g.:

PRINT dbo.StringSplit('77,54')
person BJ Patel    schedule 08.08.2012

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

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

SELECT dbo.test_func('blah')

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

person Tom H    schedule 01.09.2011

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

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

person Julien Vavasseur    schedule 04.08.2015

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

person Kev    schedule 28.04.2016