3
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
我仍然得到非確定性的錯誤消息。
我有這在另一臺服務器上工作。我不知道該怎麼做。
爲什麼要使用一個標量函數的所有建議? 'EndQDate As Year(EndDT)* 10000 + Month(EndDT)* 100 + DAY(EndDT)'? – gvee
也許'DATETIME'不確定嗎?您鏈接的頁面表示其他函數是確定性的,除非與DATETIME一起使用,並且DATETIME沒有在保證的確定性函數中列出。 – taz
可能相關:http://stackoverflow.com/questions/3037330/why-is-date-time-offset-non-deterministic-in-sql-server-2008 – taz