Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

증상

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에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아봅니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

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

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×