2011-09-01 19 views
19

He migrado una base de datos desde Oracle, y ahora tengo algunas funciones con valores escalares.Llamar a funciones con valores escalares en SQL

Sin embargo, cuando los llamo, me sale un error que dice:

No se puede encontrar cualquiera de las columnas "dbo" o la función definida por el usuario o "dbo.chk_mgr" agregado, o el nombre es ambiguo.

La llamo así:

SELECT dbo.chk_mgr('asdf') 

¿Qué estoy haciendo mal?

+1

¿Puede mostrarnos la instrucción 'CREATE' para la función en cuestión? –

+2

Además, cuando dice que lo está llamando, ¿cómo y desde dónde lo está llamando? ¿Quizás estás señalando la base de datos incorrecta sin darte cuenta? –

+0

Acabo de tener este problema. El comentario de @ TomH fue la respuesta correcta. La respuesta más votado fue una gran amenaza para mí, ya que (como dice la pregunta) estaba usando una función de valor escalar. –

Respuesta

17

¿Estás seguro de que no es un Table-Valued Function?

La razón que pido:

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 
6

que la 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ás seguro de que la función existe como una función y bajo el esquema dbo?

+1

sí, está debajo de la carpeta Funciones con valores escalares, en Funciones ... –

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

ej .:

PRINT dbo.StringSplit('77,54') 
-1

Asegúrese de que tiene la base de datos correcta seleccionada. Puede tener la base de datos maestra seleccionada si está intentando ejecutarla en una nueva ventana de consulta.

Cuestiones relacionadas