【发布时间】:2011-03-16 04:21:06
【问题描述】:
我有一个 TSQL 表值函数,它很复杂。我想确保其中一个参数不能为空。然而,当我在参数声明后指定 NOT NULL 时,我会遇到 SQL 错误。
是否可以防止调用 SQL 将表值函数的参数分配为 null?
【问题讨论】:
标签: sql sql-server-2005 tsql user-defined-functions
我有一个 TSQL 表值函数,它很复杂。我想确保其中一个参数不能为空。然而,当我在参数声明后指定 NOT NULL 时,我会遇到 SQL 错误。
是否可以防止调用 SQL 将表值函数的参数分配为 null?
【问题讨论】:
标签: sql sql-server-2005 tsql user-defined-functions
在我看来,最好在函数开头检查 NULL 值并使用 RAISERROR(不,这不是错字)引发异常。 编辑:不幸的是,这不适用于 UDF,因此您必须使用选项 2。
您还可以在创建函数时指定“RETURNS NULL ON NULL INPUT”。如果指定了这个标志,如果它的任何输入为空,函数将返回 NULL...有点自相矛盾,但它可能是你想要的。
来自 MSDN CREATE FUNCTION 文档(引用是因为他们的页面上没有锚点,bleh):
在 NULL 输入时返回 NULL |空输入时调用
指定标量值函数的 OnNULLCall 属性。如果不 指定,CALLED ON NULL INPUT 是 默认隐含。这意味着 函数体执行,即使 NULL 作为参数传递。
如果在 CLR 函数中指定了 RETURNS NULL ON NULL INPUT,则它 表示 SQL Server 可以返回 NULL 当它的任何参数 收到的是NULL,实际上没有 调用函数的主体。如果 指定的 CLR 函数的方法 在已经有一个 指示的自定义属性 在 NULL INPUT 上返回 NULL,但 CREATE FUNCTION 语句表示 CALLED ON NULL INPUT,创建 FUNCTION 语句优先。 OnNULLCall 属性不能 为 CLR 表值指定 功能。
希望它有所帮助,我同意它不必要地令人困惑。
【讨论】:
Invalid use of a side-effecting operator 'RAISERROR' within a function. 请注意。