(출처 : http://www.sqlservercentral.com/articles/T-SQL/61979/)
SQL Server 2005의 "ALTER TABLE ~ SWITCH ~ TO ~" 구문을 응용한 방법만 발췌하여 소개합니다.
1. 원본 테이블을 참조하는 모든 참조키를 DROP 한다.
2. 원본 테이블을 SCHEMABINDING 하는 모든 개체를 수정한다. (SCHEMABINDING 하지 않도록~)
3. 원본 테이블의 모든 인덱스를 DROP 한다.
4. 원본 테이블과 동일한 레이아웃의 테이블을 생성한다. 단, IDENTITY 속성을 가지도록 한다.
5. 원본 테이블에서 사본 테이블로 파티션을 스위치한다.
6. 원본 테이블을 DROP 한다.
7. 사본 테이블의 이름을 원본 테이블의 이름으로 변경한다. (sp_rename)
8. 참조키를 재 생성한다.
9. 인덱스를 재 생성한다.
10. 2항의 개체에 대해 SCHEMABINDING하도록 수정한다.
11. 그 밖의 제약 조건이 있었다면, 생성한다.
데모 코드입니다.
NON-IDENTITY 컬럼을 가진 원본 테이블 생성
동일한 레이아웃의 사본 테이블 생성. 단, IDENTITY 속성을 가지도록~
파티션 스위치
원본 테이블 삭제
사본 테이블의 이름을 원본 테이블의 이름으로 변경
SQL Server 2005의 "ALTER TABLE ~ SWITCH ~ TO ~" 구문을 응용한 방법만 발췌하여 소개합니다.
1. 원본 테이블을 참조하는 모든 참조키를 DROP 한다.
2. 원본 테이블을 SCHEMABINDING 하는 모든 개체를 수정한다. (SCHEMABINDING 하지 않도록~)
3. 원본 테이블의 모든 인덱스를 DROP 한다.
4. 원본 테이블과 동일한 레이아웃의 테이블을 생성한다. 단, IDENTITY 속성을 가지도록 한다.
5. 원본 테이블에서 사본 테이블로 파티션을 스위치한다.
6. 원본 테이블을 DROP 한다.
7. 사본 테이블의 이름을 원본 테이블의 이름으로 변경한다. (sp_rename)
8. 참조키를 재 생성한다.
9. 인덱스를 재 생성한다.
10. 2항의 개체에 대해 SCHEMABINDING하도록 수정한다.
11. 그 밖의 제약 조건이 있었다면, 생성한다.
데모 코드입니다.
NON-IDENTITY 컬럼을 가진 원본 테이블 생성
CREATE TABLE dbo.SOURCE_TB (
id int NOT NULL,
date datetime,
cost money
);
INSERT dbo.SOURCE_TB (id) VALUES(1);
INSERT dbo.SOURCE_TB (id) VALUES(2);
INSERT dbo.SOURCE_TB (id) VALUES(3);
동일한 레이아웃의 사본 테이블 생성. 단, IDENTITY 속성을 가지도록~
DECLARE @id int;
SELECT @id = ISNULL(MAX(id), 0) + 1 FROM dbo.SOURCE_TB;
EXEC ('
CREATE TABLE dbo.DESTINATION_TB (
id int IDENTITY(' + @id + ', 1) NOT NULL,
date datetime,
cost money
파티션 스위치
ALTER TABLE dbo.SOURCE_TB SWITCH TO dbo.DESTINATION_TB
원본 테이블 삭제
DROP TABLE dbo.SOURCE_TB
사본 테이블의 이름을 원본 테이블의 이름으로 변경
EXEC sp_rename 'DESTINATION_TB' ,'SOURCE_TB'
'SQL Server > SQL Server Tip & Tech' 카테고리의 다른 글
테이블 변수 vs 임시 테이블 (0) | 2009.06.11 |
---|---|
Vardecimal Storage Format을 사용하여 데이터베이스 사이즈 줄이기 (0) | 2009.06.01 |
모든 테이블의 데이터 일괄 삭제하기 (5) | 2009.03.04 |
로그 DB 설계와 관리에 대한 컨셉 (슬라이딩 윈도우) (0) | 2009.02.25 |
Login을 각 Database의 User와 동기화하기 (0) | 2009.01.15 |