Ottengo risultati strani quando si utilizza NEWID() in combinazione con una colonna calcolata persistente. Sto usando qualche funzione sbagliata?Risultati incoerenti con la colonna calcolata NEWID() e PERSISTED
L'utilizzo non persistente durante la creazione della colonna e, pertanto, il calcolo dei valori al momento della selezione, restituirà valori corretti. L'aggiornamento della colonna (col1) restituirà anche i valori corretti.
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
*/
Penso che sia interessante notare che si ottiene il comportamento previsto con la parola chiave "PERSISTED" omessa. Potresti volerlo chiamare nella tua domanda. –
@DanGuzman Buon punto, aggiornata la domanda. – Kristofer
cross-postato su [dba.se] (http://dba.stackexchange.com/q/142675/68127) –