Microsoft SQL Server 테이블을 사용 하 여 Microsoft Dynamics AX를 동기화 할 때 오류 메시지: "[table_name]에서 데이터 정의 언어 명령을 실행할 수 없습니다"

적용 대상: Microsoft Dynamics AX 4.0Axapta Object Server

증상


Microsoft SQL Server 테이블을 사용 하 여 Microsoft Dynamics AX를 동기화 할 때 다음과 같은 오류 메시지가 나타납니다.
테이블에서 데이터 정의 언어 명령을 실행할 수 없습니다. SQL 데이터베이스 오류가 발행 했습니다.
또한 응용 프로그램 개체 Server (AOS) 서버에서 이벤트 뷰어 응용 프로그램 로그에 다음과 유사한 오류 메시지가 기록 됩니다.
개체 서버 01: 데이터베이스 (세션 1 (관리자)) 보고 했습니다: [Microsoft] [ODBC SQL Server 드라이버] [SQL Server] 고유 인덱스를 만들 개체 이름에 대 한 중복 된 키를 찾을 수 있기 때문에 종료 되었습니다. ' dbo. table_name' 및 인덱스 이름을 'I_xxxIDX'. 중복 키 값 (value1, value2)입니다. SQL 문의: "고유 인덱스 만들기 I_xxxIDX ON table_name (열 1,열 2)"
참고
  • Table_name 개체 틀은 테이블 이름의 자리 표시자입니다.
  • I_xxxIDX 개체 틀은 고유 인덱스 이름 자리 표시자입니다.
  • 개체 틀 value1value2 자리 표시자는 중복 키 값에 대 한 자리 표시자입니다.
  • 열 1 자릿수와 열 2 자리 표시자는 열 이름을 나타내는 자리 표시자입니다.

원인


이 문제는 SQL Server 데이터베이스에서 Microsoft Dynamics AX 만들려고 하거나 다시 만들려고 하 고 고유 인덱스를 기반으로 하는 중복 레코드가 있기 때문에 발생 합니다.

해결 방법


주의 Microsoft Dynamics AX 데이터베이스에서 데이터를 제거 하기 전에 새 고유 인덱스를 추가 하는 이유를 이해 해야 합니다. 일반적으로 Microsoft Dynamics AX 추가 하거나 인덱스를 추가 하거나 Microsoft Dynamics AX 구성 형태로 모듈을 제거 하면 라이센스 키 또는 변경 될 때 제거 됩니다. 또한 개발자가 응용 프로그램 개체 트리 (AOT)를 통해 또는 일반 업그레이드 과정에서 인덱스를 추가할 때 인덱스를 추가할 수 있습니다. 확실 하지 않은 경우 인덱스를 추가 하는 이유 없는 데이터를 제거 해야 합니다.

참고: 이 문서의 지침을 수행 하기 전에 문제가 발생할 경우 복원할 수 있는 데이터베이스의 전체 백업 복사본 있는지 확인 하십시오.

이 문제를 해결 하려면의 경우 고유 인덱스를 추가할 수 또는 고유 인덱스를 추가 해야 하는지 여부를 확인할 수 있도록 테이블에서 중복 레코드를 제거 합니다. 이렇게 하려면, 다음 단계를 수행하십시오.
  1. AOS 서버에서 시작, 실행을 클릭, eventvwr.exe입력 한 다음 확인을 누릅니다.
  2. 이벤트 뷰어의 콘솔 트리에서 응용 프로그램 노드를 클릭 합니다.
  3. 먼저 응용 프로그램 로그에 표시 되는 중복 키 오류를 표시 합니다. 이렇게 하려면 두 번 클릭 하면 오류 및 소스: Dynamics 서버 0xx 먼저 세부 정보 창에 표시 되는 항목.

    참고: X 는 오류 메시지를 반환 하는 AOS 서비스의 인스턴스에 대 한 자리 표시자입니다.
  4. Based 표시 되는 오류 메시지, 오류 메시지에는 다음 단계에서 사용 하는 SQL Server 스크립트의 값과 테이블 이름, 열 이름 및 인덱스 이름을 바꿉니다.
  5. SQL Server Management Studio 또는 SQL 쿼리 분석기에서 다음 SQL Server 스크립트를 실행 하는 실제 오류에서 값 뒤 바뀝니다.
    select count(*) as Duplicate_Record_Count, <column1>, <column2> from <table_name> group by <column1>, <column2> having count(*) > 1 
    참고: 스크립트를 실행 하는 경우 해당 정보를 사용 하 여 자리 표시자를 대체 합니다.
  6. 5 단계에서 반환 되는 각 레코드를 중복 레코드를 적어도 하나 있습니다. Duplicate_record_count 열의 인덱스 값을 사용 하 여 복제할 레코드 수를 나타냅니다. 중복 된 레코드가 발견 되 면 고유 인덱스를 추가 하려면 레코드를 제거할 여부 또는 고유 인덱스를 추가 해야 하는지 여부를 결정 해야 합니다. 모든 중복 레코드를 찾으려면 다음 스크립트를 실행 합니다.
    select Distinct a.* from <table_name> a join (select <column1>, <column2> from <table_name> group by <column1>, <column2> having count(*) > 1) b
    on a.<column1> = b.<column1> and a.<column2> = b.<column2>

    참고
    • 스크립트를 실행 하기 전에 해당 정보를 사용 하 여 자리 표시자를 대체 합니다. 오류 메시지에서 정보를 얻을 수 있습니다.
    • Recid 열 선택 하거나 레코드를 제거 하려면 각 테이블에는 키 식별자로 사용할 수 있습니다.
    • 스크립트를 실행 하거나 결과 해석 하는 방법에 대해 잘 모르는 경우에 결과 처리 하는 방법을 결정 하려면 정식된 데이터베이스 관리자 (DBA) 및 기술 지원 담당자와 함께 작업할 수 있습니다.
  7. 5 단계에서 스크립트는 중복 된 값이 더 이상 하 고 고유 인덱스를 추가할 수 있습니다 나타내는 null 값 반환 될 때까지 5 단계와 6 단계를 반복 합니다.
  8. 여러 개의 고유 인덱스 추가, 이벤트 뷰어 응용 프로그램 로그에 다음 중복 키 오류를 보고 하 고 7 단계-4 단계를 반복 합니다 중복 키 오류를 더 이상 없을 때까지 이벤트 뷰어 응용 프로그램 로그.