2009-02-16 7 views
5

Opcja "ZWRACA NULL ON NULL INPUT" dla skalarnego UDF (patrz CREATE FUNCTION) zatrzymuje wykonywanie funkcji, jeśli parametr ma wartość NULL i po prostu zwraca NULL.Parametry NULL w skalarnych funkcjach UDF na MSSQL

Oznacza to, że zwarcia.

Czy ktoś wie, jak obsługuje wiele parametrów?

Byłoby użyteczne zwierać wywołanie funkcji z wieloma parametrami, np. Jeśli pierwszy ma wartość NULL co najmniej.

Kiedy będę miał czas, użyję profilera, aby spróbować wyśledzić wywołania udf. Szukałem, ale nie mogę znaleźć niczego. Bardziej prawdopodobne, że nie użyłem poprawnych wyszukiwanych słów.

W międzyczasie, czy ktoś ma jakieś pomysły lub doświadczenie?

odpowiedzi z innych światów RDBMS są zbyt mile widziany .. czy jest to ustawienie ANSI i widziałem wyników dla DB2 i MySQL w moich poszukiwań

edycji, oparte na komentarz: Tylko dla funkcji non-CLR

Pozdrowienia S

Edytuj: Nie trzeba uruchamiać profilera. Doh! Świadczy to zachowanie:

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 

Odpowiedz

9

Tak, to funkcja, która określa RETURNS NULL ON NULL INPUT będzie zwarcie jeśli dowolny jej pa współczynniki ramowe to NULL.

Proponuje to documentation, ale jest niejasne i wydaje się odnosić tylko do funkcji CLR. (Myślę, że jest to próba Microsoftu na celu wyjaśnienie, że zachowanie NULL określone w CREATE FUNCTION zastąpi atrybut OnNullCall na sposób CLR).

Przetestowałem to z funkcji non-CLR zarówno SQL2005 i SQL2008 i krótko- obwody dokładnie zgodnie z oczekiwaniami.

+0

Przydatne wiedzieć. Mam wiele UDF UML manipulacji ciągiem, które skorzystają z tego – Kristen

+1

Dokumentacja MSDN powinna być poprawiona w tym przypadku, na pewno ! – gotqn

2

Czy ktoś wie jak to obsługuje wiele parametrów?

jest wyjaśnienie w linku wystarczające, czy szukałeś innego ujęcia?

Jeśli zwraca NULL ON NULL wejście jest określony w funkcji CLR, to wskazuje, że SQL Server może powrócić NULL gdy dowolny z argumentów to otrzymuje NULL, bez faktycznie powołując ciało funkcja

+0

Dla funkcji innych niż CLR ... – gbn

+0

@ gbn: ZWRACA NULL ON NULL INPUT dotyczy tylko funkcji CLR. – casperOne

+0

Znam jego zwarcia dla pojedynczego parametru innego niż CLR. Skąd masz informacje? – gbn