다음을 통해 공유


시스템 버전이 지정된 시점 테이블의 스키마 변경

적용 대상:Microsoft Fabric Preview의 SQL Server 2016(13.x) 이상 버전 Azure SQL DatabaseAzure SQL Managed Instance SQL 데이터베이스

ALTER TABLE 문을 사용하여 열을 추가, 변경 또는 제거합니다.

Remarks

temporal 테이블의 스키마를 변경하려면 현재 및 기록 테이블에 대한 CONTROL 권한이 필요합니다.

ALTER TABLE 작업 중 시스템은 두 테이블에 스키마 잠금을 유지합니다.

지정된 스키마 변경은 적절하게 기록 테이블에 전파됩니다(변경 유형에 따라).

기본값으로 varchar(max), nvarchar(max), varbinary(max) 또는 XML 열을 추가하는 것은 모든 버전의 SQL Server에서 업데이트 데이터 작업이 됩니다.

열 추가 후 행 크기가 행 크기 제한을 초과하는 경우 새 열을 온라인에 추가할 수 없습니다.

NOT NULL 열로 테이블을 확장한 후 해당 테이블의 모든 열은 시스템에서 자동으로 채워지므로 기록 테이블에서 기본 제약 조건을 삭제하는 것이 좋습니다.

temporal 테이블에서는 온라인 옵션(WITH (ONLINE = ON)이 ALTER TABLE ALTER COLUMN에 영향을 주지 않습니다. ALTER 옵션에 지정된 값과 관계없이 ONLINE 열은 온라인으로 수행되지 않습니다.

ALTER COLUMN을 사용하여 기간 열에 대한 IsHidden 속성을 변경할 수 있습니다.

다음 스키마 변경에 직접 ALTER를 사용할 수 없습니다. 이러한 종류의 변경은 SYSTEM_VERSIONING = OFF를 설정합니다.

  • 계산 열 추가
  • IDENTITY 열을 추가하기
  • 기록 테이블이 SPARSE 또는SPARSE로 설정된 경우 DATA_COMPRESSION = PAGE 열 추가 또는 DATA_COMPRESSION = ROW가 되도록 기존 열 변경은 기록 테이블에 대한 기본값입니다.
  • COLUMN_SET을 추가하기
  • ROWGUIDCOL 열 추가 또는 ROWGUIDCOL이 되도록 기존 열 변경
  • 열에 현재 또는 기록 테이블에 null 값이 포함된 경우 NULL 열을 NOT NULL로 변경

Examples

A. temporal 테이블의 스키마 변경

다음은 temporal 테이블의 스키마를 변경하는 몇 가지 예입니다.

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName varchar(100);

ALTER TABLE dbo.Department
    ADD WebAddress nvarchar(255) NOT NULL
    CONSTRAINT DF_WebAddress DEFAULT 'www.example.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. HIDDEN 플래그를 사용하여 기간 열 추가

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

기간 열에서 숨겨진 플래그를 지우는 데 ALTER COLUMN <period_column> DROP HIDDEN을 사용할 수 있습니다.

C. SYSTEM_VERSIONING을 OFF로 설정하여 스키마 변경

다음 예제에서는 설정 SYSTEM_VERSIONING = OFF가 여전히 필요한 스키마 변경을 보여 줍니다(IDENTITY 열 추가). 이 예제에서는 데이터 일관성 확인을 사용하지 않도록 설정합니다. 동시 데이터 변경이 발생할 수 없으므로 트랜잭션 내에서 스키마 변경을 수행하는 경우 이 검사는 필요하지 않습니다.

BEGIN TRANSACTION

ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);

ALTER TABLE [dbo].[CompanyLocationHistory]
    ADD Cntr INT NOT NULL
    CONSTRAINT DF_Cntr DEFAULT 0;

ALTER TABLE [dbo].[CompanyLocation] SET
(
    SYSTEM_VERSIONING = ON
    (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);

COMMIT;