Tôi nhận được kết quả lẻ khi sử dụng NEWID() kết hợp với cột được tính liên tục. Tôi có sử dụng một số chức năng sai?Kết quả không nhất quán với cột được tính toán NEWID() và PERSISTED
Không sử dụng lâu dài khi tạo cột và do đó tính toán giá trị khi chọn cột, sẽ trả lại giá trị chính xác. Cập nhật cột (col1) cũng sẽ trả lại giá trị chính xác.
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
*/
Tôi nghĩ đáng chú ý là người ta nhận được hành vi mong đợi bằng từ khóa 'PERSISTED' bị bỏ qua. Bạn có thể muốn gọi điều đó trong câu hỏi của bạn. –
@DanGuzman Điểm tốt, đã cập nhật câu hỏi. – Kristofer
được đăng chéo tới [dba.se] (http://dba.stackexchange.com/q/142675/68127) –