Подтвердить что ты не робот

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

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

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

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

Я называю это следующим образом:

SELECT dbo.chk_mgr('asdf')

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

4b9b3361

Ответ 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

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