Вызов скалярных функций в 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
этот синтаксис работает для меня:
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 может быть выбрана, если вы пытаетесь запустить ее в новом окне запроса.