Вызов скалярнозначных функций в SQL
Я перенесла базу данных из oracle и теперь имею несколько Scalar-значных функций.
Однако, когда я их вызываю, я получаю сообщение об ошибке:
Невозможно найти столбец "dbo" или определяемую пользователем функцию или агрегат "dbo.chk_mgr", или имя неоднозначно.
Я называю это следующим образом:
SELECT dbo.chk_mgr('asdf')
Что я делаю неправильно?
Ответы
Ответ 1
Вы уверены, что это не 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
Ответ 2
Можно сделать следующее
PRINT dbo.[FunctionName] ( [Parameter/Argument] )
Например:
PRINT dbo.StringSplit('77,54')
Ответ 3
Этот синтаксис отлично работает для меня:
CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.test_func('blah')
Вы уверены, что функция существует как функция и под схемой dbo?
Ответ 4
Вы используете встроенную функцию значения таблицы. Поэтому вы должны использовать функцию Select * From.
Если вы хотите использовать функцию select(), вы должны использовать скалярную функцию.
https://msdn.microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx
Ответ 5
Убедитесь, что выбрана правильная база данных. Вы можете выбрать основную базу данных, если вы пытаетесь запустить ее в новом окне запроса.