증상
다음과 같은 경우를 생각해 볼 수 있습니다.
-
Microsoft SQL Server 2016에서 호환성 수준이 130으로 설정된 데이터베이스를 사용합니다.
-
열 저장소 인덱스 및 행 저장소 인덱스 또는 힙에 액세스하고 필터 조건자(WHERE 절)를 포함하는 쿼리를 실행합니다.
이 시나리오에서는 SQL Server 필터 조건자를 데이터 원본 연산자(테이블 또는 인덱스 검색 또는 검색)에 더 가깝게 푸시할 수 없습니다. 이로 인해 최적이 아닐 수 있는 쿼리 성능이 발생할 수 있습니다.
또한 쿼리가 필터링된 데이터에 따라 정확도가 달라지는 식(예: 형식 변환)을 사용하는 경우(예: char 테이블 열이 int로 변환되지만 값의 하위 집합에 유효한 int 표현만 포함되고 이 하위 집합은 필터 조건자로 식별됨) 쿼리가 다음 중 하나와 유사한 데이터 변환 오류로 인해 실패할 수 있습니다.
varchar 값 '0.5
'를 데이터 형식 int로 변환할 때 Msg 245, 수준 16, 상태 1, 줄 20 변환이 실패했습니다.
Msg 8114, 수준 16, 상태 5, 줄 34
데이터 형식 varchar를 bigint로 변환하는 동안 오류가 발생했습니다.
해결 방법
이 문제는 SQL Server 2016 SP1의 SQL Server:
누적 업데이트 2에 대한 다음 누적 업데이트에서 해결되었습니다.
참고 이 수정 사항이 적용되려면 쿼리 최적화 프로그램 핫픽스를 사용하도록 설정해야 합니다.
추적 플래그 4199, 데이터베이스 범위 구성 설정 QUERY_OPTIMIZER_HOTFIXES=ON(SQL Server 2016 이상에서 사용 가능) 또는 쿼리 옵션 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'(SQL Server 2016 SP1 이상에서 사용 가능)을 USE_HINT 사용하여 쿼리 최적화 프로그램 핫픽스를 사용하도록 설정할 수 있습니다.
SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. SQL Server 2016의 SQL Server:
최신 누적 업데이트에 대한 최신 누적 업데이트를 확인하세요.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.
참고 자료
Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아봅니다.