다음 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
에서 실행하면 쿼리에서 in이 예상대로 수행되고 다음과 같은 유효한 결과가 반환됩니다.
source_col | target_col ---------------------- 10 | -1 0 | -1
그러나 SQL Server 2016 (13.0.4001.0 X64)에서 실행할 때 모든 행이 업데이트되는 것은 아니며 다음이 반환됩니다.
source_col | target_col ---------------------- 10 | -1 0 | 0
이것은 나에게 버그처럼 보인다.
예, 이것은 버그입니다. CTP 2.1 SQL 2017에 그것을 테스트하고 SQL 2016과 마찬가지로 동일한 동작
—
딘 Savović