tipos - Llamando funciones escalares en SQL
tipos de funciones en sql server (5)
He migrado una base de datos de Oracle, y ahora tengo algunas funciones de valor escalar.
Sin embargo, cuando los llamo, recibo un error que dice:
No se puede encontrar la columna "dbo" o la función definida por el usuario o el agregado "dbo.chk_mgr", o el nombre es ambiguo.
Lo estoy llamando así:
SELECT dbo.chk_mgr(''asdf'')
¿Qué estoy haciendo mal?
¿Estás seguro de que no es una Table-Valued Function
?
La razón por la que pregunto:
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
Resultado:
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.
Sin embargo...
SELECT * FROM dbo.chk_mgr(''asdf'')
mgr_name
------------------
pointy haired boss
Asegúrese de tener seleccionada la base de datos correcta. Puede tener seleccionada la base de datos maestra si está intentando ejecutarla en una nueva ventana de consulta.
Esa sintaxis funciona bien para mí:
CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.test_func(''blah'')
¿Está seguro de que la función existe como una función y bajo el esquema dbo?
Está utilizando una función de valor de tabla en línea. Por lo tanto, debe utilizar la función Seleccionar * Desde. Si desea utilizar la función de selección (), debe utilizar una función escalar.
https://msdn.microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx
PRINT dbo.[FunctionName] ( [Parameter/Argument] )
P.ej:
PRINT dbo.StringSplit(''77,54'')