증상
Microsoft SQL Server 2014, 2016 및 2017에서 연결, CHAR 또는 VARCHAR 열에서 몇 가지 문자열 연산을 수행 하는 쿼리를 사용 하 고 있다고 가정 합니다. 다음과 같은 시나리오를 생각해 볼 수 있습니다.
-
자신에 게 할당 된 서로 다른 데이터 정렬을 사용 하 여 열을 연결 합니다.
-
이러한 데이터 정렬은 서로 호환 되지 않습니다. 예를 들어 Latin1_General_CI_AI Latin1_General_BIN와 같이 한 부씩 인쇄 되는 열을 연결 하려고 합니다.
-
연결의 최종 결과는 데이터 정렬 충돌 해결의 결과로 특정 데이터 정렬 ("database_default" 포함)에 할당 됩니다.
이 시나리오에서 SQL Server는 "데이터 정렬이 없는 경우 잘못 된 비교" 라는 정품 어설션을 반환 하 고 다음과 유사한 오류 메시지가 나타날 수 있습니다.
위치: typinfo. cpp:LineNumber 식: false SPID: SPID 프로세스 ID: ProcessID 설명: 데이터 정렬이 없기 때문에 비교가 잘못 되었습니다.
메시지 3624, 수준 20, 상태 1, 줄 LineNumber 시스템 어설션 검사에 실패 했습니다. 자세한 내용은 SQL Server 오류 로그를 확인 하세요. 일반적으로 어설션 오류는 소프트웨어 버그 또는 데이터 손상으로 인해 발생 합니다. 데이터베이스가 손상 되었는지 확인 하려면 DBCC CHECKDB를 실행 하는 것이 좋습니다. 설치 하는 동안 Microsoft에 덤프를 보내려고 동의한 경우 미니 덤프가 Microsoft로 전송 됩니다. 최신 서비스 팩 또는 기술 지원의 핫픽스에 대 한 업데이트가 Microsoft에서 제공 될 수 있습니다.
메시지 596, 수준 21, 상태 1, 줄 LineNumber 세션이 중단 상태 이므로 실행을 계속할 수 없습니다.
메시지 0, 수준 20, 상태 0, 줄 LineNumber
현재 명령에 심각한 오류가 발생 했습니다. 결과가 있으면 삭제 해야 합니다.
원인
쿼리 최적화 단계에서 SQL Server는 여러 쿼리 스테이지의 중간 결과 (예: 연결)에 cardinalities를 계산 하려고 시도 합니다. 데이터 정렬 충돌 해결은 매우 끝에 발생 하므로 쿼리 최적화 프로그램이이를 인식 하지 못할 수 있으며, 충돌 하는 데이터 정렬을 사용 하 여 입력에 대 한 연결 카디널리티 계산을 수행 하려고 합니다.
해결 방법
이 문제는 다음과 같은 SQL Server 누적 업데이트에서 해결 되었습니다.
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.
참조
Microsoft에서 소프트웨어 업데이트를 설명 하는 데 사용 하는 용어에 대해 알아봅니다.