Я получаю нечетные результаты при использовании NEWID() в сочетании с постоянным вычисленным столбцом. Я использую какую-то функцию неправильно?Непоследовательные результаты с вычисляемым столбцом NEWID() и PERSISTED
Не использовать сохранение при создании столбца и, следовательно, вычисление значений при их выборе, вернет правильные значения. Обновление столбца (col1) также вернет правильные значения.
DECLARE @test TABLE (
Col1 INT,
Contains2 AS CASE WHEN 2 IN (Col1) THEN 1 ELSE 0 END PERSISTED)
INSERT INTO @test (Col1) VALUES
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5)),
(ABS(CHECKSUM(NEWID()) % 5))
SELECT * FROM @test
UPDATE @test SET Col1 = Col1*1
SELECT * FROM @test
/*
Col1 Contains2
2 0
2 0
0 1
4 0
3 0
Col1 Contains2
2 1
2 1
0 0
4 0
3 0
*/
Я думаю, что стоит отметить, что ожидаемое поведение с ключевым словом 'PERSISTED' опущено. Возможно, вы захотите назвать это в своем вопросе. –
@DanGuzman Хороший вопрос, обновленный вопрос. – Kristofer
перекрестная ссылка на [dba.se] (http://dba.stackexchange.com/q/142675/68127) –