如何防止表值函数参数的空值?

Lly*_*yle 1 sql t-sql sql-server-2005 user-defined-functions

我有一个TSQL表值函数,它很复杂.我想确保其中一个参数不能为null.然而,当我NOT NULL在参数声明后指定时,我会遇到SQL错误.

是否可以通过调用SQL来阻止将表值函数的参数赋值为null?

Fai*_*sal 5

在我看来,最好在函数开头检查NULL值,并使用RAISERROR(不,这不是拼写错误)来引发异常. 编辑:不幸的是,这对UDF不起作用,所以你必须选择2.

您还可以在创建函数时指定"RETURNS NULL ON NULL INPUT".如果指定了这个标志,如果它的任何输入都是null,函数将返回NULL ......有点矛盾,但它可能是你想要的.

从MSDN CREATE FUNCTION文档(引用,因为他们的页面上没有锚点,bleh):

在NULL INPUT上返回NULL | 调用NULL输入

指定标量值函数的OnNULLCall属性.如果未指定,则默认隐含CALLED ON NULL INPUT.这意味着即使将NULL作为参数传递,函数体也会执行.

如果在CLR函数指定NULL ON NULL输入返回,则表明SQL Server可以返回NULL,当它的任何接收参数为NULL,而不实际调用函数体.如果已经指定了CLR函数的方法具有指示返回NULL ON NULL INPUT的自定义属性,但CREATE FUNCTION语句说明被叫ON NULL INPUT,CREATE FUNCTION语句的优先级.无法为CLR表值函数指定OnNULLCall属性.

希望它有所帮助,我同意这是不必要的混淆.