Tsql 确定性函数是非确定性函数
SQL Server 10.50.1600 我试图在计算列中使用标量值函数。然后我希望创建一个索引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”,因为该列不确
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