Share via


분할된 뷰에서 데이터 수정

분할된 뷰를 업데이트할 수 없는 경우 이 뷰는 원본 테이블의 읽기 전용 복사본으로만 작동합니다. 업데이트할 수 있는 분할된 뷰는 원본 테이블의 모든 기능을 갖습니다.

뷰가 UNION ALL 문을 사용하여 개별 결과 집합이 하나로 조합되는 SELECT 문의 집합인 경우 업데이트할 수 없는 분할된 뷰로 간주됩니다. 각 SELECT 문은 하나의 SQL Server 기본 테이블을 참조합니다. 테이블은 로컬 테이블이거나 네 부분으로 된 이름, OPENROWSET 함수 또는 OPENDATASOURCE 함수를 사용하여 참조하는 연결된 테이블이 될 수 있습니다. OPENDATASOURCE 또는 통과 쿼리를 지정하는 OPENROWSET 함수는 사용할 수 없습니다.

또한 뷰를 참조하는 데이터 수정 문은 INSERT, UPDATE 및 DELETE 문에 정의된 규칙을 따라야 합니다.

[!참고]

분할된 뷰로 대량 가져오기 작업은 bcp 명령, BULK INSERT 문 또는 INSERT ... SELECT * FROM OPENROWSET(BULK...) 문에 의해 지원되지 않습니다. 그러나 INSERT 문을 사용하여 분할된 뷰에 여러 행을 삽입할 수 있습니다.

분할된 뷰가 서버에 분산되어 있는 경우 기본 테이블에 트리거 또는 연계 작업을 사용하지 마십시오. 트리거 또는 연계 작업을 통해 뷰 정의에 영향을 미칠 수 있는 기본 데이터를 변경할 수 있습니다.

사용자에게 뷰의 기반이 되는 각 테이블에 대한 CONTROL, ALTER, TAKE OWNERSHIP 또는 VIEW DEFINITION 권한이 있는 경우에만 분산형 분할 뷰를 업데이트할 수 있습니다. 자세한 내용은 분산형 분할 뷰의 메타데이터 표시 문제 해결을 참조하십시오.

[!참고]

SQL Server 2008 Enterprise 또는 SQL Server 2008 Developer을 설치한 경우에만 분산형 분할 뷰를 통해 데이터를 수정할 수 있습니다. 그러나 SQL Server 2008 버전에서는 로컬 분할된 뷰를 통해 데이터를 수정할 수 있습니다.

INSERT 문

INSERT 문은 분할된 뷰를 통해 멤버 테이블에 데이터를 추가합니다. INSERT 문은 다음 규칙을 따라야 합니다.

  • 열이 기본 테이블에서 NULL 값을 갖거나 기본 테이블에 DEFAULT 제약 조건이 정의된 경우에도 모든 열이 INSERT 문에 포함되어야 합니다.

  • INSERT 문의 VALUES 절에 DEFAULT 키워드를 지정할 수 없습니다.

  • INSERT 문은 멤버 테이블 중 하나의 분할 열에 정의된 CHECK 제약 조건의 논리에 부합하는 값을 제공해야 합니다.

  • 멤버 테이블에 ID 속성을 갖는 열이 있으면 INSERT 문이 허용되지 않습니다.

  • 멤버 테이블에 timestamp 열이 있으면 INSERT 문이 허용되지 않습니다.

  • 동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 INSERT 문이 허용되지 않습니다.

UPDATE 문

UPDATE 문은 분할된 뷰를 통해 하나 이상의 멤버 테이블에 있는 데이터를 수정합니다. UPDATE 문은 다음 규칙을 따라야 합니다.

  • 해당하는 멤버 테이블에 정의된 DEFAULT 값이 열에 포함되어도 UPDATE 문은 SET 절에서 DEFAULT 키워드를 값으로 지정할 수 없습니다.

  • ID 속성이 있는 열의 값은 변경할 수 없지만, 이외에 다른 열은 업데이트할 수 있습니다.

  • 열에 text, image 또는 ntext 데이터가 있으면 PRIMARY KEY의 값을 변경할 수 없습니다.

  • 기본 테이블에 timestamp 열이 있으면 업데이트가 허용되지 않습니다.

  • 동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 업데이트가 허용되지 않습니다.

DELETE 문

DELETE 문은 분할된 뷰를 통해 하나 이상의 멤버 테이블에 있는 데이터를 제거합니다. 동일한 뷰 또는 멤버 테이블 중 하나에 자체 조인이 있으면 DELETE 문이 허용되지 않습니다.