Tsql 确定性函数是非确定性函数

Tsql 确定性函数是非确定性函数,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,SQL Server 10.50.1600 我试图在计算列中使用标量值函数。然后我希望创建一个索引 ALTER TABLE [dbo].[Modified] ADD [StartQDate] AS ([dbo].[QDay]([StartDT])) PERSISTED, [EndQDate] AS ([dbo].[QDay]([EndDT])) PERSISTED; 当我尝试创建计算列时,收到以下错误 无法持久化表“Modified”中的计算列“StartQDate”,因为该列不确

SQL Server 10.50.1600

我试图在计算列中使用标量值函数。然后我希望创建一个索引

ALTER TABLE [dbo].[Modified]
ADD [StartQDate] AS ([dbo].[QDay]([StartDT])) PERSISTED,
    [EndQDate]   AS ([dbo].[QDay]([EndDT])) PERSISTED;
当我尝试创建计算列时,收到以下错误

无法持久化表“Modified”中的计算列“StartQDate”,因为该列不确定

除了我的标量函数QDay被定义为

FUNCTION [dbo].[QDay] 
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
    RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END
根据这一点,它应该是确定性的

即使我将函数更改为

FUNCTION [dbo].[QDay] 
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
    RETURN 1
END
我仍然收到不确定的错误消息


我在另一台服务器上工作。我不知道该怎么办。

解决办法是添加

WITH SCHEMABINDING
正如在这一问题中所建议的那样


为什么要使用标量函数呢<代码>年结束日期(EndDT)*10000+月结束日期(EndDT)*100+天结束日期(EndDT)?可能
日期时间不确定?您链接的页面表明,除非与
DATETIME
一起使用,否则其他函数是确定性的,并且
DATETIME
未列在保证的确定性函数中。可能相关:
FUNCTION [dbo].[QDay] 
(
    @Date DATETIME
)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
    RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END