2010-08-23 5 views

Répondre

2

Oui.

Vous pouvez le faire avec un peu d'un hack impliquant openrowset mais ce n'est pas recommandé car il va ouvrir une nouvelle connexion.

CREATE FUNCTION dbo.test() 
RETURNS varchar(200) 
AS 
BEGIN 
    RETURN (Select top 1 [Name] from 
OPENROWSET('SQLNCLI','Server=.\SQL2008;Trusted_Connection=yes;','SET NOCOUNT ON;SET FMTONLY OFF;EXEC MASTER..SP_HELP') 
) 

END 
GO 

SELECT dbo.test() 
1

Réponse rapide: Non

Pourquoi: Une procédure stockée ne produit pas de sortie qui peut être réutilisée dans SQL.

+1

Il y a des paramètres de sortie, et vous pouvez insérer le résultat d'une procédure stockée dans une table de – Andomar

2

Les fonctions ne peuvent lire que des données, elles ne peuvent pas mettre à jour ou modifier quoi que ce soit. Il s'ensuit que les fonctions ne sont pas autorisées à appeler des procédures stockées.

0

Pour être efficace, une fonction doit être déterministe, c'est-à-dire que la sortie ne doit dépendre que de l'entrée, afin que le résultat puisse être mis en cache.

Si vous souhaitez appeler une procédure stockée à partir d'une fonction, vous devez rendre cette fonction non déterministe.

+2

La quasi-totalité UDF dépendent du contenu d'une ou plusieurs tables, donc ils ne sont pas du tout déterministe – Andomar

+0

@Andomar: Pas du tout. Il y a beaucoup d'UDF qui sont déterministes. – Guffa

Questions connexes