2010-03-19 4 views
2

여러 테이블이있는 Access 데이터베이스 (Access 2003)가 있고 SQL Server 2005로 데이터를 가져와야합니다. Access 데이터는 SQL Server와 동일한 구조로되어 있지 않습니다. 그래서 나는 SQL Server에 필요한 형식으로 변환하는 다양한 쿼리를 만들었습니다. 기본적으로 SQL 서버의 각 테이블에 대해 나는이 개 질문이 다음 차례는, fieldNames 및 SQL 테이블과 호환 유형을 생성하는 선택 쿼리, 기본적으로 기본 키 자동 증가 (Autoinc)를Access 데이터베이스에서 Access 쿼리를 통해 SQL Server로 가져올 때의 문제

Insert into [Sql_table] (field1, field2, ...) 
Select [field1, field2, ...] from [Access_table] 

는 SQL 모두를 수행하고 원래의 액세스 테이블이 추가 쿼리 , 그리고 그것을 쿼리에 포함시킵니다.

내가 삽입 쿼리 및 소스 선택 쿼리를 실행

(최대 수백에) 모두 원래의 정체성

그러나 때 소스 쿼리가 함께 레코드가 확인 삽입, 확인 작동하지 매우 많은 기록이 이상의 레코드 (나는 10000 레코드 몇 테이블을 가지고), 난 두 가지 상황이 있습니다

중 하나를 액세스 쿼리로 인해 기본 키 위반으로 SQL 서버에 모든 레코드를 추가 할 수 없습니다 (하지만 위반이 전혀 없다보고
  1. ). 이 경우 단순히 액세스를 닫고 다시 시작하면 ... 두 번째 상황이 발생합니다.

  2. 쿼리를 실행하면 Access에서 x 레코드를 가져올 수 없음을 알 수 있습니다 (대개 소수, 10, 21, 32) 10000+에서 10000까지)를 가져올 수 있지만 나머지는 가져옵니다. 어쨌든 키 위반은 없습니다. 모든 ID는 고유하며 Autoinc 필드로 원래 Access 테이블에 생성됩니다. 내가 다시 SQL 데이터 및 실행 쿼리를 삭제하면 이상한 것은 내가하지, 때로는 더, 때로는 몇 수입 기록의 서로 다른 번호를,하지만 10000

중 10 ~ 50의 범위에있는 모든 시도 I Access 2007에서도 마찬가지지만 동일한 일이 발생합니다.

SQL 서버 테이블은 마스터 테이블과 외래 키 관계가 있지만 가져 오기를 시도하는 데이터에서도이 관계가 충족됩니다.

누구든지이 문제에 직면하고 해결책을 알고 있습니까?

감사

PS : SQL 서버를 통해 액세스 데이터를 변환하기 위해 많은 일을 방법이있을 것이기 때문에 내가 SQL 서버 가져 오기 마법사를 사용하지 않는 - 선택 쿼리가 이미 만들어진 액세스를가 매우 복잡하고, 사용 VBA로 작성된 일부 함수 (이 유일한 목적으로 tsql로 다시 작성하기가 어려움)

답변

1

나는 여러 번 이와 같은 것을 실행했습니다. 액세스 오류 메시지는 종종 오도합니다. 나는 당신에게 직접적인 대답이 없지만 여기에 내가 할 일이있다.

sql 서버에서 대상 sql 서버 테이블의 구조와 일치하는 빈 테이블을 만들지 만 제약 조건을 두지 않는다.

그런 다음 해당 테이블에 액세스 데이터를 복사하십시오.

이제는 관리 스튜디오 (또는 사용하는 SQL 인터페이스)를 사용하고 가짜 테이블에서 실제 테이블로 삽입하십시오. 작동한다면, 나는 당신에게 무엇을 말해야할지 잘 모르겠다. 그래도 작동하지 않는다면 관리 스튜디오에서 오류 메시지를 더 잘 보여줘야합니다.

-on

+0

덕분에 일을 한 방법입니다,하지만 그들을 다시하고 모두가 소비하는 시간을 가져옵니다을 세척이에 관련된 여러 테이블이 있기 때문에, 복잡하고 도착 – bzamfir

3

이번 한 번 거래인가요? 그렇다면 Access를 사용하여 테이블과 데이터를 SQL Server로 내 보낸 다음 들어가서 정리하면 어떨까요? 즉, 이미 것을 시도 내가 과거

some info

+0

매우 자주 요구되는 것은 아니지만 일회성 거래가 아닙니다. 지금 SQL Server를 사용하는 응용 프로그램은 개발 중입니다. 새 응용 프로그램에서 해당 모듈을 가져올 때 이전 액세스 테이블을 가져옵니다. 일반적으로 SQL 테이블을 변경하고 액세스 변환 쿼리를 다시 조정하고 가져 오기를 다시 실행해야합니다. 주말 내내 SQL 서버 증분 db 구조 업데이트를 테스트하고 새로운 가져 오기가 제대로 작동하는지 확인해야하므로 20-30 번 정도 수행했습니다. 그래서 기본적으로이 작업을 반복적으로 수행해야합니다. – bzamfir

+0

제 상황에서는 액세스 데이터베이스에서 약 150 만 개의 행을 가져온 다음 SQL Server로 내 보내면 약 20 분이 걸립니다. – jim

+1

짐의 제안을지지합니다. SQL Server의 원시 데이터 테이블에 최소한의 제약 조건으로 데이터를로드합니다. 둘째로 인구의 완전성을 증명하십시오. 세 번째는 추가 된 제약 조건 (예 : 기본 키 등)이있는 테이블에 원시 데이터를 추가하고 추가하지 못한 레코드에 대한 오류 메시지를 검토합니다. – heferav

관련 문제