시스템 버전 관리 temporal 테이블의 스키마 변경
적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance
ALTER TABLE
문을 사용하여 열을 추가, 변경 또는 제거합니다.
설명
temporal 테이블의 스키마를 변경하려면 현재 및 기록 테이블에 대한 CONTROL
권한이 필요합니다.
ALTER TABLE
작업 중 시스템은 두 테이블에 스키마 잠금을 유지합니다.
지정된 스키마 변경은 적절하게 기록 테이블에 전파됩니다(변경 유형에 따라).
기본값으로 varchar(max), nvarchar(max), varbinary(max) 또는 XML 열을 추가하는 것은 모든 버전의 SQL Server에서 업데이트 데이터 작업이 됩니다.
열 추가 후 행 크기가 행 크기 제한을 초과하는 경우 새 열을 온라인에 추가할 수 없습니다.
새 NOT NULL
열로 테이블을 확장한 후 해당 테이블의 모든 열은 시스템에서 자동으로 채워지므로 기록 테이블에서 기본 제약 조건을 삭제하는 것이 좋습니다.
temporal 테이블에서는 온라인 옵션(WITH (ONLINE = ON
)이 ALTER TABLE ALTER COLUMN
에 영향을 주지 않습니다. ONLINE
옵션에 지정된 값과 관계없이 ALTER
열은 온라인으로 수행되지 않습니다.
ALTER COLUMN
을 사용하여 기간 열에 대한 IsHidden
속성을 변경할 수 있습니다.
다음 스키마 변경에 직접 ALTER
를 사용할 수 없습니다. 이러한 종류의 변경은 SYSTEM_VERSIONING = OFF
를 설정합니다.
- 계산 열 추가
IDENTITY
열 추가- 기록 테이블이
DATA_COMPRESSION = PAGE
또는DATA_COMPRESSION = ROW
로 설정된 경우SPARSE
열 추가 또는SPARSE
가 되도록 기존 열 변경은 기록 테이블에 대한 기본값입니다. COLUMN_SET
추가ROWGUIDCOL
열 추가 또는ROWGUIDCOL
이 되도록 기존 열 변경- 열에 현재 또는 기록 테이블에 null 값이 포함된 경우
NULL
열을NOT NULL
로 변경
예제
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;