적용 대상:Microsoft Fabric Preview의 SQL Server 2016(13.x) 이상 버전
Azure SQL Database
Azure 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;