KB2950189 - 해결 방법: SQL Server에 DML 트리거가 있는 테이블에서 업데이트 쿼리를 실행할 때 액세스 위반이 발생합니다.

적용 대상
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

증상

Microsoft SQL Server 2008 R2, SQL Server 2012 또는 SQL Server 2014에 DML 트리거가 있는 테이블이 있고 해당 트리거에서 삽입/삭제된 테이블을 다른 테이블과 조인한다고 가정합니다. 이 테이블에서 DML 문을 실행하면 트리거 컴파일 중에 액세스 위반이 발생할 수 있으며 다음 오류가 발생합니다.

참고

현재 명령에 심각한 오류가 발생했습니다. 결과가 있는 경우 해당 결과를 삭제해야 합니다.

또한 다음과 같은 오류가 SQL Server 오류 로그에 기록됩니다.

참고

<날짜><시간> spid# ***FilePath>\SQLDumpxxx.txt로< 전송되는 스택 덤프
<날짜><시간> spid# SqlDumpExceptionHandler: 프로세스 # 치명적인 예외 c0000005 EXCEPTION_ACCESS_VIOLATION을 생성했습니다. SQL Server가 이 프로세스를 종료합니다.
<날짜><시간> spid# * *******************************************************************************
<날짜><시간> spid# *
<날짜><시간> spid# * 스택 덤프 시작:
<날짜><시간> spid# * <날짜><시간> spid #
<날짜><시간> spid# *
<날짜><시간> spid# *
<날짜><시간> spid# * 예외 주소 = 000000000009E4F2A Module(sqlservr+00000000002D4F2A)
<날짜><시간> spid# * 예외 코드 = c0000005 EXCEPTION_ACCESS_VIOLATION
<날짜><시간> spid# * 주소 00000000000000000을 쓰는 중 액세스 위반이 발생했습니다.
<날짜><시간> spid# * 입력 버퍼 510바이트 -
<날짜><시간> spid# * SQL_query_code

해결 방법

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

SQL Server 2012 SP2용 누적 업데이트 1 /en-us/help/2976982

SQL Server 2014용 누적 업데이트 2 /en-us/help/2967546

SQL Server 2012 SP1용 누적 업데이트 10 /en-us/help/2954099

SQL Server 2008 R2 SP2용 누적 업데이트 12 /en-us/help/2938478

SQL Server의 누적 업데이트 정보

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

      

해결 방법

이 문제를 해결하려면 삽입/삭제된 테이블을 다른 테이블과 조인하는 쿼리에서 직접 사용하지 말고, 대신 임시 테이블에 캐시하고 쿼리에서 임시 테이블을 사용합니다.

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.