2009-02-16 12 views
5

La opción "DEVUELVE NULL EN ENTRADA NULA" para una UDF escalar (consulte CREATE FUNCTION) detiene la ejecución del cuerpo de la función si el parámetro es nulo y simplemente devuelve NULL.Parámetros NULL en UDF escalares en MSSQL

Es decir, cortocircuitos.

¿Alguien sabe cómo maneja múltiples parámetros?

Sería útil cortocircuitar una llamada de función con múltiples parámetros, por ejemplo, si el primero es NULO como mínimo.

Cuando tenga tiempo, usaré el generador de perfiles para intentar rastrear las llamadas udf. He buscado pero no puedo encontrar nada. Es más probable que no haya utilizado los términos de búsqueda correctos.

Mientras tanto, ¿alguien tiene alguna idea o experiencia?

Respuestas de los otros mundos RDBMS también son bienvenidos .. esta es una configuración ANSI y vi resultados para DB2 y MySQL en las búsquedas

Editar, con base a un comentario: Para las funciones CLR no sólo

Cheers S

Edit: No necesito ejecutar el generador de perfiles. Doh! Esto demuestra el comportamiento:

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 

Respuesta

9

, una función que especifica RETURNS NULL ON NULL INPUT un cortocircuito en cualquier caso de su pa los rameters son NULL.

documentation sugiere esto, aunque no está claro y parece referirse solo a las funciones CLR. (Creo que esto es el intento de Microsoft para aclarar que el comportamiento especificado en NULLCREATE FUNCTION anulará el atributo OnNullCall en el método CLR.)

He probado esto con funciones no CLR tanto en SQL2005 y SQL2008 y corto circuitos exactamente como se esperaba

+0

Útil saber. Tengo varias UDF de manipulación de cadenas que se beneficiarían de esta – Kristen

+1

La documentación de MSDN debería mejorarse en este caso, de seguro ! – gotqn

2

¿alguien sabe cómo se maneja múltiples parámetros?

es la explicación en su relación suficiente, o buscabais una opinión diferente?

Si devuelve NULL ON NULL INPUT es especificada en una función CLR, que indica que SQL Server puede volver NULL cuando cualquier de los argumentos que recibe es nulo, sin llegar a invocando el cuerpo de la función

+0

Para funciones que no sean CLR ... – gbn

+0

@gbn: RETURNS NULL ON NULL INPUT solo es aplicable para funciones CLR. – casperOne

+0

Conozco los cortocircuitos para un solo parámetro que no es CLR. ¿Dónde consigues tu información? – gbn

Cuestiones relacionadas