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
Utile à savoir J'ai un certain nombre de UDF de manipulation de chaînes qui en bénéficieraient – Kristen
La documentation MSDN devrait être améliorée dans ce cas, à coup sûr ! – gotqn