为啥我在此 SQL Server 内联表值函数上收到 11555 错误?

Posted

技术标签:

【中文标题】为啥我在此 SQL Server 内联表值函数上收到 11555 错误?【英文标题】:Why do I get a 11555 error on this SQL Server inline table valued function?为什么我在此 SQL Server 内联表值函数上收到 11555 错误? 【发布时间】:2018-08-30 19:52:04 【问题描述】:

我正在尝试使此函数成为 SQL Server 2016 上的内联表值函数。

CREATE FUNCTION ufn_GetBusinessRuleValue
(   
    -- Add the parameters for the function here
    @FieldName VARCHAR(MAX) NOT NULL
)
RETURNS TABLE 
AS
RETURN 
(
    -- Add the SELECT statement with parameter references here
    SELECT
        FieldValue
    FROM 
        [BVI].[dbo].[BusinessRules] br
    WHERE 
        br.ClientID = DB_NAME()
        AND DATEDIFF(DAY, GETDATE(), ActiveDate) <= 0
        AND (DATEDIFF(DAY, GETDATE(), InactiveDate) >= 0 OR InactiveDate IS NULL)
        AND br.FieldName = 'ufn_GetBVIEmpType.Configuration'
)

当我尝试使用非空参数创建它时,我收到以下错误消息:

消息 11555,级别 15,状态 1,过程 ufn_GetBusinessRuleValue,第 9 行 [批处理开始第 15 行] 参数“@FieldName”已声明为 NOT NULL。 NOT NULL 参数仅支持本机编译的模块,内联表值函数除外。

我认为这是一个内联表值函数。这不是真正的内联表值函数吗?我做错了什么?

【问题讨论】:

仅供参考,您的 FieldName 在函数中是硬编码的 【参考方案1】:

您需要删除NOT NULL,因为内联 TVP 不支持它:

CREATE FUNCTION ufn_GetBusinessRuleValue
(   
    -- Add the parameters for the function here
    @FieldName VARCHAR(MAX) 
)

CREATE FUNCTION:

空|非空

仅支持本机编译的标量用户定义函数。

【讨论】:

“内联表值函数除外。”,这是什么意思?

以上是关于为啥我在此 SQL Server 内联表值函数上收到 11555 错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 sql server 内联表值函数的返回值的元数据?

如何在 SQL Server 中将拆分函数转换为内联表值 udf?

数据库原理与应用(SQL Server)笔记 第十章 用户定义函数

SQL 中内联表值函数的性能影响

为啥 SQL Server 表值函数插入需要很长时间?

SQL Server 自定义函数(Function)——参数默认值