2009-02-16 18 views
5

L'option "RETURNS NULL ON NULL INPUT" pour une fonction UDF scalaire (voir CREATE FUNCTION) arrête le corps de la fonction en cours d'exécution si le paramètre est nul et renvoie simplement NULL.Paramètres NULL dans les fonctions UDF scalaires sur MSSQL

Autrement dit, il court-circuite.

Est-ce que quelqu'un sait comment il gère plusieurs paramètres?

Il serait utile de court-circuiter un appel de fonction avec plusieurs paramètres, par exemple si le premier est NULL au moins.

Quand j'aurai le temps, j'utiliserai profiler pour essayer de tracer les appels udf. J'ai cherché mais je ne trouve rien ... plus probablement je n'ai pas utilisé les termes de recherche corrects.

En attendant, est-ce que quelqu'un a des idées ou de l'expérience?

Les réponses des autres mondes de SGBDR sont les bienvenus aussi .. Ce réglage est ANSI et j'ai vu des résultats pour DB2 et MySQL dans mes recherches

Modifier, basé sur le commentaire: Pour les fonctions non-CLR seulement

Salutations S

Modifier: Je n'ai pas besoin d'exécuter le profileur. Doh! Cela démontre le comportement:

CREATE FUNCTION dbo.ufnTest (
    @dummy tinyint 
) 
RETURNS tinyint 
WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint 
) 
RETURNS tinyint 
--WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0), dbo.ufnTest(NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint, 
    @dummy2 tinyint 
) 
RETURNS tinyint 
WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL) 
GO 


ALTER FUNCTION dbo.ufnTest (
    @dummy tinyint, 
    @dummy2 tinyint 
) 
RETURNS tinyint 
--WITH RETURNS NULL ON NULL INPUT 
AS 
BEGIN 
    RETURN 1 
END 
GO 
SELECT dbo.ufnTest(0, 2), dbo.ufnTest(NULL, 2), dbo.ufnTest(0, NULL) 
GO 

Répondre

9

Oui, une fonction qui spécifie RETURNS NULL ON NULL INPUT sera court-circuit si toute de son pa les ramètres sont NULL.

Le documentation le suggère, bien qu'il ne soit pas clair et semble se référer uniquement aux fonctions CLR. (Je pense que c'est la tentative de Microsoft de préciser que le comportement NULL spécifié dans CREATE FUNCTION remplace l'attribut OnNullCall sur la méthode CLR.)

Je l'ai testé cela avec des fonctions non-CLR dans les deux SQL2005 et SQL2008 et court circuits exactement comme prévu.

+0

Utile à savoir J'ai un certain nombre de UDF de manipulation de chaînes qui en bénéficieraient – Kristen

+1

La documentation MSDN devrait être améliorée dans ce cas, à coup sûr ! – gotqn

2

Est-ce que quelqu'un sait comment il gère plusieurs paramètres?

est l'explication de votre lien suffisant, ou étiez-vous à la recherche d'une opinion différente?

Si RETURNS NULL ON NULL INPUT est spécifiée dans une fonction CLR, il indique que SQL Server peut retourner NULL lorsque une des arguments qu'il reçoit est NULL, sans réellement invoquer le corps la fonction

+0

Pour les fonctions non-CLR ... – gbn

+0

@gbn: RETURNS NULL ON NULL INPUT s'applique uniquement aux fonctions CLR. – casperOne

+0

Je connais les courts-circuits pour les paramètres non-CLR. Où trouvez-vous votre information? – gbn

Questions connexes