为啥我在此 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?