请查看以下SQL查询:
CREATE TYPE dbo.IN_MEMORY_TABLE_TYPE AS TABLE
(
source_col INT NULL,
target_col INT not NULL
INDEX ix_InMemoryTable NONCLUSTERED (target_col)
)
WITH (MEMORY_OPTIMIZED = ON)
GO
DECLARE
@t dbo.IN_MEMORY_TABLE_TYPE
INSERT @t
(
source_col,
target_col
)
VALUES
(10, 0),
(0, 0)
UPDATE r1
SET
target_col = -1
FROM @t r1
WHERE EXISTS
(
SELECT *
FROM @t r2
WHERE r2.source_col > 0
)
SELECT *
FROM @t
GO
DROP TYPE dbo.IN_MEMORY_TABLE_TYPE
在SQL Server 2014(12.0.4100.1 X64)上执行UPDATE
时,查询中的执行将按预期执行,并返回以下有效结果:
source_col | target_col ---------------------- 10 | -1 0 | -1
但是,在SQL Server 2016(13.0.4001.0 X64)上执行时,并非所有行都会更新,并返回以下内容:
source_col | target_col ---------------------- 10 | -1 0 | 0
在我看来,这像是个小虫,对您来说,看起来是否如此?
是的,这是一个错误。测试了SQL 2017年CTP 2.1和因为它在2016年的SQL它的表现一样
—
迪恩萨沃维奇