다음을 통해 공유


ACCESS 애플리케이션을 SQL Server에 연결 - Azure SQL Database(AccessToSQL)

SQL Server에서 기존 Access 애플리케이션을 사용하려는 경우 원래 Access 테이블을 마이그레이션된 SQL Server 또는 SQL Azure 테이블에 연결할 수 있습니다. 연결은 쿼리, 양식, 보고서 및 데이터 액세스 페이지에서 Access 데이터베이스의 데이터 대신 SQL Server 또는 Azure SQL Database의 데이터를 사용하도록 Access 데이터베이스를 수정합니다.

참고 항목

Access 테이블은 Access에서 다시 기본 SQL Server 또는 SQL Azure 업데이트와 함께 업데이트되지 않습니다. 테이블을 연결하고 기능을 확인한 후 Access 테이블을 삭제할 수 있습니다.

Access 및 SQL Server 테이블 연결

Access 테이블을 SQL Server 또는 SQL Azure 테이블에 연결하면 Jet 데이터베이스 엔진은 연결 정보 및 테이블 메타데이터를 저장하지만 데이터는 SQL Server 또는 SQL Azure에 저장됩니다. 이 연결을 사용하면 실제 테이블과 데이터가 SQL Server 또는 SQL Azure에 있더라도 Access 애플리케이션이 Access 테이블에 대해 작동할 수 있습니다.

참고 항목

SQL Server 인증을 사용하는 경우 암호는 연결된 Access 테이블에 명확한 텍스트로 저장됩니다. Windows 인증을 사용하는 것이 좋습니다.

테이블을 연결하려면

  1. Access 메타데이터 탐색기에서 연결할 테이블을 선택합니다.

  2. 테이블을 마우스 오른쪽 단추로 클릭한 다음 링크를 선택합니다.

Access용 SSMA(SQL Server Migration Assistant)는 원래 Access 테이블을 백업하고 연결된 테이블을 만듭니다.

테이블을 연결하면 SSMA의 테이블이 작은 링크 아이콘과 함께 표시됩니다. Access에서 테이블은 화살표가 가리키는 지구본인 "연결된" 아이콘과 함께 표시됩니다.

Access에서 테이블을 열면 키 집합 커서를 사용하여 데이터가 검색됩니다. 따라서 큰 테이블의 경우 모든 데이터가 한 번에 검색되지 않습니다. 그러나 테이블을 탐색할 때 Access는 필요에 따라 추가 데이터를 검색합니다.

Important

액세스 테이블을 Azure 데이터베이스와 연결하려면 SQL Server SNAC(Native Client) 버전 10.5 이상이 필요합니다.
Microsoft SQL Server 2008 R2 기능 팩에서 최신 버전의 SNAC를 가져올 수 있습니다.

Access 테이블 연결 해제

SQL Server 또는 SQL Azure 테이블에서 Access 테이블의 연결을 해제하면 SSMA는 원래 Access 테이블과 해당 데이터를 복원합니다.

테이블 연결을 해제하려면

  1. Access 메타데이터 탐색기에서 연결을 해제할 테이블을 선택합니다.

  2. 테이블을 마우스 오른쪽 단추로 클릭한 다음 연결 끊기를 선택합니다.

테이블을 다른 서버에 연결

Access 테이블을 하나의 SQL Server 인스턴스에 연결했고 나중에 다른 인스턴스에 대한 링크를 변경하려는 경우 테이블을 다시 연결해야 합니다.

테이블을 다른 서버에 연결하려면

  1. Access 메타데이터 탐색기에서 연결을 해제할 테이블을 선택합니다.

  2. 테이블을 마우스 오른쪽 단추로 클릭한 다음 연결 해제를 선택합니다.

  3. SQL Server다시 연결 단추를 클릭합니다.

  4. Access 테이블을 연결하려는 SQL Server 또는 SQL Azure 인스턴스에 커넥트.

  5. Access 메타데이터 탐색기에서 연결할 테이블을 선택합니다.

  6. 테이블을 마우스 오른쪽 단추로 클릭한 다음 링크를 선택합니다.

연결된 테이블 업데이트

SQL Server 또는 SQL Azure 테이블 정의가 변경된 경우 이 항목의 앞에 나와 있는 절차를 사용하여 SSMA의 테이블을 연결 해제한 다음 다시 연결할 수 있습니다. Access를 사용하여 테이블을 업데이트할 수도 있습니다.

Access를 사용하여 연결된 테이블을 업데이트하려면

  1. Access 데이터베이스를 엽니다.

  2. 개체 목록에서 테이블을 클릭합니다.

  3. 연결된 테이블을 마우스 오른쪽 단추로 클릭한 다음 연결된 테이블 관리자를 선택합니다.

  4. 업데이트하려는 연결된 각 테이블 옆에 있는 검사 상자를 선택한 다음 확인을 클릭합니다.

가능한 마이그레이션 후 문제

다음 섹션에서는 Access에서 SQL Server 또는 SQL Azure로 데이터베이스를 마이그레이션한 후 원인 및 해결 방법과 함께 테이블을 연결한 후 기존 Access 애플리케이션에서 발생할 수 있는 문제를 나열합니다.

연결된 테이블을 사용하여 성능 저하

원인: 다음과 같은 이유로 일부 쿼리의 크기 조정이 느려질 수 있습니다.

  • 애플리케이션은 SQL Server 또는 SQL Azure에 없는 함수에 따라 달라지며, 이로 인해 Jet는 로컬로 테이블을 끌어와 SELECT 쿼리를 실행합니다.

  • 여러 행을 업데이트하거나 삭제하는 쿼리는 Jet에서 각 행에 대해 매개 변수가 있는 쿼리로 전송됩니다.

해결 방법: 느리게 실행되는 쿼리를 통과 쿼리, 저장 프로시저 또는 뷰로 변환합니다. 통과 쿼리로 변환하면 다음과 같은 문제가 발생합니다.

  • 통과 쿼리는 수정할 수 없습니다. 쿼리 결과를 수정하거나 새 레코드를 추가하는 방법은 쿼리에 바인딩된 폼에 명시적 수정 또는 추가 단추를 사용하는 것과 같은 다른 방법으로 수행해야 합니다.

  • 일부 쿼리에는 사용자 입력이 필요하지만 통과 쿼리는 사용자 입력을 지원하지 않습니다. 사용자 입력은 매개 변수를 묻는 VBA(Visual Basic for Applications) 코드 또는 입력 컨트롤로 사용되는 양식에서 가져올 수 있습니다. 두 경우 모두 VBA 코드는 사용자 입력을 사용하여 쿼리를 서버에 제출합니다.

자동 증가 열은 레코드가 업데이트될 때까지 업데이트되지 않습니다.

원인: Jet에서 RecordSet.AddNew를 호출한 후 레코드가 업데이트되기 전에 자동 증가 열을 사용할 수 있습니다. SQL Server 또는 SQL Azure에서는 그렇지 않습니다. ID 열 새 값의 새 값은 새 레코드를 저장한 후에만 사용할 수 있습니다.

해결 방법: ID 필드에 액세스하기 전에 다음 VBA(Visual Basic for Applications) 코드를 실행합니다.

Recordset.Update  
Recordset.Move 0,  
Recordset.LastModified  

새 레코드를 사용할 수 없음

원인: VBA를 사용하여 SQL Server 또는 SQL Azure 테이블에 레코드를 추가하는 경우 테이블의 고유 인덱스 필드에 기본값이 있고 해당 필드에 값을 할당하지 않으면 SQL Server 또는 SQL Azure에서 테이블을 다시 열 때까지 새 레코드가 나타나지 않습니다. 새 레코드에서 값을 가져오려고 하면 다음 오류 메시지가 표시됩니다.

Run-time error '3167' Record is deleted.

해결 방법: VBA 코드를 사용하여 SQL Server 또는 SQL Azure 테이블을 열 때 다음 예제와 같이 옵션을 포함합니다 dbSeeChanges .

Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)

마이그레이션 후 일부 쿼리는 사용자가 새 레코드를 추가하도록 허용하지 않습니다.

원인: 쿼리에 고유 인덱스에 포함된 모든 열이 포함되지 않은 경우 쿼리를 사용하여 새 값을 추가할 수 없습니다.

해결 방법: 하나 이상의 고유 인덱스에 포함된 모든 열이 쿼리의 일부인지 확인합니다.

Access를 사용하여 연결된 테이블 스키마를 수정할 수 없습니다.

원인: 데이터를 마이그레이션하고 테이블을 연결한 후에는 Access에서 테이블의 스키마를 수정할 수 없습니다.

해결 방법: SQL Server Management Studio를 사용하여 테이블 스키마를 수정한 다음 Access에서 링크를 업데이트합니다.

원인: 데이터를 마이그레이션한 후 열의 하이퍼링크는 기능을 잃고 간단한 nvarchar(max) 열이 됩니다.

해결 방법: 없음.

일부 SQL Server 데이터 형식은 Access에서 지원되지 않습니다.

원인: 나중에 Access에서 지원하지 않는 데이터 형식을 포함하도록 SQL Server 또는 SQL Azure 테이블을 업데이트하는 경우 Access에서 테이블을 열 수 없습니다.

해결 방법: 지원되는 데이터 형식의 행만 반환하는 Access 쿼리를 정의할 수 있습니다.

참고 항목

SQL Server로 액세스 데이터베이스 마이그레이션