2012-10-18 7 views
1

통과 쿼리을 사용하여 SQL Server 테이블과 MS Access에서 데이터를 검색하는 것만 가능합니다. 하지만 그 반대의 경우는 어떨까요? Access 테이블에서 SQL 서버 테이블로.통과 쿼리를 통해 Access 테이블의 데이터를 SQL Server 테이블에 추가하는 방법은 무엇입니까?

고성능이 필요한 MS Access 내 옵션에는 어떤 것이 있습니까?
내가 INTO 문 MS Access 테이블이나 쿼리, 따라서 내 INSERT를 참조 할 수없는 통과 쿼리에서

(연결된 테이블에 추가 추가 쿼리를 갖는 일반적인 접근 방식은 단순히 너무 느립니다) 일할 수 없다. VBA를 통한 해결 방법이 있습니까?

+1

Access는 모든 작업을 로컬에서 처리하므로 서버의 이점을 얻지 못하기 때문에이 방향으로 연결하는 것이 항상 느립니다. 만약 당신이 SQL 서버에 액세스 할 수있는 수준이 있다면, 내가 가장 잘 찾은 것이 표준 txt 또는 csv 파일에 대한 액세스에서 내 보낸 다음 SQL 서버의 ** 대량 삽입 ** 옵션을 사용하는 것입니다. 액세스가 끝난 후 모든 작업을 수행해야하는 경우 불행히도 빠른 방법을 사용할 수 없습니다. –

+1

아마 내가 DAO (VBA에서) 또는 ADO를 사용하여 속도를 비교해보십시오. 또한 ADO를 SQL Server 저장 프로 시저와 함께 사용해 볼 수도 있습니다. 그러나 나는 매트와 함께 Access 이외의 다른 것으로 이것을함으로써 당신의 가장 큰 이익을 얻게 될 것이라고 동의합니다. 둘 중 하나가 배경 스레드를 사용할 수 있다고 생각하기 때문에 .NET dll 또는 AddIn이 작동 할 수도 있습니다 (이 경우에도 gotchas 및 딸꾹질가있을 수 있음). – HK1

+0

입력 해 주셔서 감사합니다. 이처럼 많은 다른 한계를 제외하고는 Access의 또 다른 한계를 드러내는 것 같습니다. – MOLAP

답변

0

OPENROWSET은 패스 스루 쿼리에 사용할 수 있습니다.

SELECT id, 
     atext 
INTO anewtable 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
        'z:\docs\test.accdb'; 'admin';'',table1); 

이러한 옵션의 일부 또는 전부를해야 할 수 있습니다

sp_configure 'show advanced options', 1; 
RECONFIGURE; 
GO 
sp_configure 'Ad Hoc Distributed Queries', 1; 
RECONFIGURE; 
GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    N'DynamicParameters', 1 
GO 

나는 그것이 더 빨리 될 것이라고 의심한다.

0

Access에서 매크로를 사용하여 SetValue를 사용하여 쿼리 정의를 동적으로 생성 할 수 있습니다 (이제 SetProperty라고합니다). 기본적으로 쿼리를 통해 기존 통과에 대한 쿼리 정의를 업데이트 한 다음 실행할 수 있습니다. 나는 이것을 한 번했고 훨씬 더 빨랐지만, 그것은 오래 전이었다. 쿼리를 생성하기 위해 테이블을 순환하는 VB 조각이있을 수 있습니다.