Как предотвратить нулевые значения для параметров табличных функций? - PullRequest
1 голос
/ 15 июля 2010

У меня есть табличная функция TSQL, и она сложная.Я хочу убедиться, что один из параметров не может быть нулевым.Тем не менее, когда я указываю NOT NULL после объявления моего параметра, у меня появляются ошибки SQL.

Можно ли предотвратить присвоение параметру табличной функции значения null вызывающим SQL?

1 Ответ

5 голосов
/ 15 июля 2010

По моему мнению, было бы лучше проверить значения NULL в начале вашей функции и использовать RAISERROR (нет, это не опечатка), чтобы вызвать исключение. РЕДАКТИРОВАТЬ: К сожалению, это не работает для UDF, поэтому вам придется перейти с опцией 2.

У вас также есть возможность указать "RETURNS NULL ON NULL INPUT"когда вы создаете свою функцию.Если этот флаг указан, функция вернет NULL, если любой из ее входов будет нулевым ... что-то вроде парадокса, но это может быть тем, что вы хотите.

Из MSDN CREATE FUNCTION документация (цитируемая, потому что у них нет привязки на их странице, блеф):

ВОЗВРАЩАЕТСЯ НУЛЬ НА ВХОДЕ NULL |CALLED ON NULL INPUT

Указывает атрибут OnNULLCall скалярной функции.Если не указано, по умолчанию подразумевается CALLED ON NULL INPUT.Это означает, что тело функции выполняется, даже если в качестве аргумента передается NULL.

Если в функции CLR указано RETURNS NULL ON NULL INPUT, это означает, что SQL Server может возвращать NULL, когда любой из аргументов, которые он получаетНЕДЕЙСТВИТЕЛЕН, фактически не вызывая тело функции.Если метод функции CLR, указанный в, уже имеет пользовательский атрибут, который указывает RETURNS NULL ON NULL INPUT, но оператор CREATE FUNCTION указывает CALLED ON NULL INPUT, оператор CREATE FUNCTION имеет приоритет.Атрибут OnNULLCall нельзя указывать для табличных функций CLR.

Надеюсь, что это немного поможет, и я согласен, что это излишне запутывает.

...