Опция «ВОЗВРАЩАЕТ ПУСТО (NULL ON NULL INPUT») для скалярной UDF (см. CREATE FUNCTION ) останавливает выполнение тела функции, если параметр имеет значение NULL, и просто возвращает NULL.
То есть это короткие замыкания.
Кто-нибудь знает, как он обрабатывает несколько параметров?
Было бы полезно замкнуть вызов функции с несколькими параметрами, скажем, если первый из них по крайней мере равен NULL.
Когда у меня будет время, я буду использовать профилировщик, чтобы попытаться отследить вызовы udf.
Я искал, но ничего не могу найти ... скорее всего, я не использовал правильные условия поиска.
А пока у кого-нибудь есть идеи или опыт?
Приветствуются также ответы из других миров RDBMS. Это параметр ANSI, и я видел результаты для DB2 и MySQL в своих поисках
Редактирование на основе комментария: только для не-CLR функций
Приветствие
S
Edit:
Мне не нужно запускать профилировщик. Doh!
Это демонстрирует поведение:
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