Saya tahu ini bukan kali pertama jenis pertanyaan ini ditanyakan.
Tetapi mengapa dalam skenario berikut adalah kolom yang dihitung tetap dibuat "non-deterministik". Jawabannya harus selalu sama, bukan?
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
Msg 4936, Level 16, Negara 1, Baris 42 Kolom terkomputasi 'UTCTime' dalam tabel 'test' tidak dapat dipertahankan karena kolom tersebut tidak deterministik.
Saya pikir saya mengikuti aturan deterministc di sini .
Apakah mungkin untuk membuat kolom yang dihitung tetap di sini?