J'ai migré une base de données depuis Oracle et j'ai maintenant quelques fonctions à valeur scalaire.
Cependant, lorsque je les appelle, j'obtiens une erreur disant:
Impossible de trouver la colonne "dbo" ou la fonction définie par l'utilisateur ou l'agrégat "dbo.chk_mgr", ou le nom est ambigu.
Je l'appelle comme ça:
SELECT dbo.chk_mgr('asdf')
Qu'est-ce que je fais mal?
Êtes-vous sûr que ce n'est pas un Table-Valued Function
?
La raison pour laquelle je demande:
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
Résultat:
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.
Toutefois...
SELECT * FROM dbo.chk_mgr('asdf')
mgr_name
------------------
pointy haired boss
Peut faire ce qui suit
PRINT dbo.[FunctionName] ( [Parameter/Argument] )
Par exemple.:
PRINT dbo.StringSplit('77,54')
Cette syntaxe fonctionne bien pour moi:
CREATE FUNCTION dbo.test_func
(@in varchar(20))
RETURNS INT
AS
BEGIN
RETURN 1
END
GO
SELECT dbo.test_func('blah')
Êtes-vous sûr que la fonction existe en tant que fonction et sous le schéma dbo?
Vous utilisez une fonction de valeur de table en ligne. Par conséquent, vous devez utiliser la fonction Select * From. Si vous souhaitez utiliser la fonction select (), vous devez utiliser une fonction scalaire.
https://msdn.Microsoft.com/fr-fr/library/ms186755%28v=sql.120%29.aspx