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
根据Microsoft,应该是确定性的。
即使我将功能更改为
FUNCTION [dbo].[QDay]
(
@Date DATETIME
)
RETURNS INT
AS
BEGIN
RETURN 1
END
我仍然收到非确定性错误消息。
我在另一台服务器上工作。我不知道该怎么做。
答案 0 :(得分:5)
解决方案是添加
WITH SCHEMABINDING
正如此问题Sql Server deterministic user-defined function
中所述FUNCTION [dbo].[QDay]
(
@Date DATETIME
)
RETURNS INT
WITH SCHEMABINDING
AS
BEGIN
RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date)
END