다음을 통해 공유


RDA 제한 사항

Microsoft SQL Server Compact 3.5(SQL Server Compact 3.5)의 RDA(Remote Data Access)에는 다음과 같은 영역에 제한 사항이 있습니다.

  • 대/소문자 구분. SQL Server Compact은 SQL Server Compact 3.5 서비스 팩 1 릴리스부터 데이터베이스 수준에서 대/소문자를 구분하는 데이터 정렬을 설정하는 작업을 지원합니다. 데이터 정렬이 대/소문자를 구분하더라도 테이블 이름, 언어 키워드, 함수 및 뷰와 같은 개체 이름은 SQL Server Compact 데이터베이스에서 대/소문자를 구분하도록 처리되지 않습니다.
    SQL Server Compact 데이터베이스에서는 개체 및 데이터가 SQL Server 데이터베이스와 다른 방식으로 처리됩니다. 예를 들어 두 개의 테이블 MYTABLE 및 mytable은 대/소문자를 구분하는 SQL Server 데이터베이스에서 서로 다른 개체로 처리됩니다. SQL Server Compact 데이터베이스에서는 동일한 테이블 이름으로 처리되어 이름 충돌이 발생합니다. 반면 두 개의 값 MYVALUE와 myvalue는 SQL Server Compact에서 서로 다른 값으로 처리되므로 더 이상 기본 키 위반을 발생시키지 않습니다. 또한 이 두 값은 대/소문자를 구분하는 SQL Server 데이터베이스에서 위반을 발생시키지 않습니다.
  • ROWGUID. 서버에서 복제에도 참여한 SQL Server의 테이블에서 RDA를 사용하여 데이터를 끌어오는 경우 ROWGUIDCOL 특성을 가진 시스템 열은 제외해야 합니다. 기본적으로 이 열의 이름은 RowGuid입니다.
    예를 들어 Pull 메서드의 SQLSelectString 매개 변수에 SELECT * FROM Customers 대신 SELECT CompanyName, ContactName FROM Customers를 사용합니다.
  • 트리거. SQL Server Compact 3.5에서는 트리거를 지원하지 않습니다. 그러나 RDA가 데이터를 끌어오는 SQL Server 테이블에는 트리거가 있을 수 있습니다. 추적되는 테이블의 경우 변경 내용을 SQL Server로 다시 밀어넣을 때 SQL Server 트리거를 실행할 수 있습니다. 트리거 논리에서 SET NOCOUNT ON을 지정해야 할 수 있습니다. 그러면 "영향 받는 행이 없습니다"라는 응답과 함께 RDA Push 메서드 오류가 발생하여 영향을 받는 행 수가 반환되지 않습니다.
  • 테이블 및 열. 추적된 테이블에 사용 가능한 열 수는 1024개에서 시스템 열 7개를 제외한 1017개입니다. 이 7개 시스템 열은 보호되며, 추적된 RDA 테이블에 사용됩니다.
  • 계산 열. 레코드 집합에 계산 열이 포함된 경우 Pull 메서드는 실패합니다.
  • ID 열. IDENTITY 열을 사용하여 고유성을 생성하는 경우 RDA는 IDENTITY 열을 동적으로 관리하지 않습니다. 장치에서 IDENTITY 열의 기본 시작 값은 항상 초기값 및 증가값이 1입니다. SQL Server Compact 3.5에서는 ALTER TABLE 문을 사용하여 로컬 데이터베이스 테이블의 ID SEED 값과 ID INCREMENT 값을 수정할 수 있습니다. 그러면 각 장치에 대한 ID 범위를 수동으로 관리할 수 있습니다. 테이블에 삽입하기 전에 최대 IDENTITY 값을 확인하고 초기값을 조정해야 합니다. 예를 들어 최대 IDENTITY 값이 99인 경우 ALTER TABLE Orders ALTER COLUMN OrderId IDENTITY (100,1)를 사용하여 다음 IDENTITY 값을 100으로 다시 설정합니다.

스키마 제한 사항

SQL Server Compact 3.5에서는 결과 SQL Server Compact 3.5 테이블의 변경 내용을 추적할 수 있습니다. 적합한 추적 옵션을 지정하면 SQL Server Compact 3.5에서는 로컬 SQL Server Compact 3.5 테이블의 모든 삽입, 업데이트 및 삭제 내용을 추적합니다. 그런 다음 이 응용 프로그램에서는 Push 메서드를 호출하여 이러한 변경 내용을 원래 SQL Server 테이블로 다시 전파할 수 있습니다.

RDA 추적 PullPush 메서드는 낙관적 동시성 제어를 사용합니다. SQL Server에서는 끌어온 레코드의 잠금을 유지하지 않습니다. 응용 프로그램에서 Push를 호출하면 로컬 SQL Server Compact 3.5 데이터베이스의 변경 내용이 SQL Server 데이터베이스에 무조건 적용됩니다. 이로 인해 SQL Server 데이터베이스의 다른 사용자가 변경한 내용이 손실될 수 있습니다.

업데이트 중인 레코드가 논리적으로 분할되어 충돌이 발생하지 않을 경우 추적된 PullPush 메서드를 사용합니다. 예를 들어 고유 서비스 호출 목록을 보유한 각 기술자를 추적하는 필드 서비스 응용 프로그램에서는 추적된 PullPush 메서드를 사용할 수 있습니다.

추적된 Pull을 사용하여 생성된 SQL Server Compact 3.5 테이블에서는 다음과 같이 스키마를 변경할 수 있습니다.

  • ID 열의 초기값 또는 증가값을 변경합니다.
  • DEFAULT 제약 조건을 추가하거나 삭제합니다.
  • 외래 키를 추가하거나 삭제합니다.
  • 인덱스를 추가하거나 삭제합니다.
  • 테이블을 삭제합니다.

추적된 Pull을 처리하는 동안에는 SQL Server 테이블에서 다음과 같이 스키마를 변경할 수 없습니다.

  • 열을 추가, 삭제하거나 이름을 바꿀 수 없습니다.
  • 테이블 이름을 바꿀 수 없습니다.
  • 기본 키를 삭제할 수 없습니다.
  • 데이터 형식 정의를 변경할 수 없습니다.

이러한 SQL Server 테이블 스키마 변경을 수행하려면 SQL Server Compact 3.5 테이블을 삭제하고 변경된 SQL Server 테이블을 다시 끌어와야 합니다.