使用 SQL Server 转换为确定性函数
Posted
技术标签:
【中文标题】使用 SQL Server 转换为确定性函数【英文标题】:Convert to a deterministic function with SQL Server 【发布时间】:2017-03-09 23:58:39 【问题描述】:我正在尝试使用 SQL Server 创建一个确定性函数,以便我可以为调用此函数的视图创建索引。此函数采用列名并将月末作为日期时间返回。例如,201701
到 20170131
。
你能帮我把它转换成确定性函数吗?
CREATE FUNCTION dbo.ufnGetFiscalPeriodEndDate (@FiscalPeriod VARCHAR(10))
RETURNS DATE
WITH SCHEMABINDING
AS BEGIN
RETURN EOMONTH(CAST(LEFT(@FiscalPeriod, 4) + RIGHT(@FiscalPeriod, 2) + '01' AS DATE))
END
此 OBJECTPROPERTY 查询返回 0...
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetFiscalPeriodEndDate'), 'IsDeterministic')
【问题讨论】:
【参考方案1】:如果你有EOMONTH
,你就有DATEFROMPARTS
。我认为CAST
是不确定的,因为它可能取决于语言设置。但这似乎对我有用:
ALTER FUNCTION dbo.ufnGetFiscalPeriodEndDate (@FiscalPeriod VARCHAR(10))
RETURNS DATE
WITH SCHEMABINDING
AS BEGIN
RETURN EOMONTH(DATEFROMPARTS(LEFT(@FiscalPeriod, 4), RIGHT(@FiscalPeriod, 2) , 1));
END
go
【讨论】:
太棒了!谢谢!以上是关于使用 SQL Server 转换为确定性函数的主要内容,如果未能解决你的问题,请参考以下文章