使用 SQL 服务器转换为确定性函数
Convert to a deterministic function with SQL Server
我正在尝试使用 SQL 服务器创建一个确定性函数,以便我可以为调用此函数的视图创建索引。此函数采用列名和 returns 月末作为日期时间。例如,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 查询 returns 0...
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetFiscalPeriodEndDate'), 'IsDeterministic')
如果你有 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 服务器创建一个确定性函数,以便我可以为调用此函数的视图创建索引。此函数采用列名和 returns 月末作为日期时间。例如,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 查询 returns 0...
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetFiscalPeriodEndDate'), 'IsDeterministic')
如果你有 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