적용 대상
SQL Server 2016 Service Pack 1 SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 on Windows (all editions)

증상

Microsoft SQL Server 2016 또는 2017을 사용하고 있다고 가정합니다. wheres 문과 함께 메모리 최적화 테이블 변수를 사용하여 메모리 최적화 데이터 트랜잭션을 처리하는 경우 잘못된 결과가 발생할 수 있습니다.

예는 다음과 같습니다.

1단계: 메모리 최적화 데이터베이스 및 테이블을 만듭니다.

DATABASE 데모 만들기

ALTER DATABASE 데모 ADD FILEGROUP demo_mod CONTAINS MEMORY_OPTIMIZED_DATA 

ALTER DATABASE 데모 ADD FILE(name='demo_mod1', filename='C:\DATA\demo_mod1') TO FILEGROUP demo_mod 

데모 사용

이동

CREATE TYPE dbo. IN_MEMORY_TABLE_TYPE AS TABLE

( source_col INT NULL,

NULL이 아닌 INT target_col

INDEX ix_InMemoryTable 비클러스터형(target_col)

) WITH(MEMORY_OPTIMIZED = ON)

이동

2단계: 데이터를 삽입하고 데이터를 업데이트합니다.

DECLARE @t dbo. IN_MEMORY_TABLE_TYPE

INSERT @t( source_col, target_col ) VALUES(10, 0),(0, 0)

@t * 선택

UPDATE r1 SET target_col = -1 FROM @t r1

WHERE EXISTS( SELECT * FROM @t r2 WHERE r2.source_col > 0 )

SELECT * FROM @t

이동

3단계: 결과를 확인합니다.

실제 결과: 테이블 변수의 모든 행이 업데이트되지 @t .

source_col | target_col

----------------------

10 | -1

0 | 0

예상 결과: 모든 행이 업데이트되어야 target_col = -1입니다.

source_col | target_col

----------------------

10 | -1

0 | -1.

해결 방법

이 문제는 SQL Server 대한 다음 누적 업데이트에서 해결되었습니다.

      2017년 SQL Server 대한 누적 업데이트 1 

      SQL Server 2016 SP1 누적 업데이트 5

SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

SQL Server 2017의 최신 누적 업데이트

SQL Server 2016의 최신 누적 업데이트

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

참고 자료

Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아봅니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.