小编Kri*_*fer的帖子

使用NEWID()和PERSISTED计算列的结果不一致

当将NEWID()与持久计算列结合使用时,我得到奇怪的结果.我使用了一些功能错了吗?

在创建列时不使用持久化,因此在选择它们时计算值将返回正确的值.更新列(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 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server case calculated-columns newid

6
推荐指数
1
解决办法
290
查看次数

标签 统计

calculated-columns ×1

case ×1

newid ×1

sql-server ×1

t-sql ×1