このタイプの質問が行われたのはこれが初めてではありません。
しかし、次のシナリオで永続的な計算列が「非決定的」に作成されるのはなぜですか。答えはいつも同じでしょ?
CREATE TABLE dbo.test (Id INT, EventTime DATETIME NULL, PosixTime INT NOT NULL)
GO
DECLARE @EventTime DATETIME = '20181001 12:00:00'
DECLARE @GPSTime INT = DATEDIFF(SECOND, '19700101', @EventTime)
INSERT INTO dbo.Test(Id, EventTime, PosixTime)
VALUES (1, @EventTime, @GPSTime)
, (2, NULL, @GPSTime)
GO
SELECT * FROM dbo.test
GO
ALTER TABLE dbo.test ADD UTCTime AS CONVERT(DATETIME2,ISNULL(EventTime, DATEADD(SECOND, PosixTime, CONVERT(DATE,'19700101'))),112) PERSISTED
GO
メッセージ4936、レベル16、状態1、行42テーブル 'test'の計算列 'UTCTime'は、列が非決定的であるため保持できません。
私はここで決定論的ルールに従っていると思います。
ここに永続的な計算列を作成することはできますか?