SQL Server에서 테이블에 컬럼을 추가하는 방법은 ALTER를 사용합니다.
ALTER 기본 사용 방법
ALTER TABLE ‘테이블 이름’ ADD ‘컬럼 이름’ ‘데이터 타입’ ‘NULL or NOT NULL’
ALTER를 사용해 컬럼을 추가하게 되면 마지막 컬럼 뒤에 추가가 됩니다.
추가하고 싶은 위치를 지정해 새로운 컬럼을 추가 할 수 없습니다.
조금 번거롭고 리스크는 있지만 원하는 위치에 새로운 컬럼을 추가하는 방법을 살펴보겠습니다.
컬럼 중간에 새로운 컬럼 추가
샘플 테이블 생성
샘플 테이블을 만들어 컬럼을 추가해보겠습니다.
CREATE TABLE TBL_USER
(
UserNo int NOT NULL DEFAULT (0),
Name nvarchar(20) NOT NULL DEFAULT (''),
Addr nvarchar(50) NOT NULL DEFAULT (''),
Tel nvarchar(15) NOT NULL DEFAULT (''),
CONSTRAINT TBL_USER_PK PRIMARY KEY CLUSTERED
(
UserNo
)
)
유저 정보를 등록하는 테스트용 테이블을 만들었습니다.
하지만 유저 테이블에 나이를 저장할 컬럼이 없습니다.
추가해보도록 하겠습니다.
컬럼 추가 샘플
ALTER TABLE TBL_USER ADD Age int DEFAULT 0
결과
나이를 저장할 Age라는 컬럼이 추가되었습니다.
하지만 마지막에 추가가 됩니다.
MySQL에서는 기존 테이블에 컬럼을 추가하고 싶은 경우 원하는 위치에 추가하도록 AFTER가 있지만 SQL Server에서는 아쉽게도 컬럼 중간에 추가할 수 있는 명령어가 없습니다.
원하는 위치에 컬럼을 추가하고 싶은 경우에는 직접 쿼리를 만들어서 사용해야 합니다.
중간에 넣는 쿼리를 만들어 보도록 하겠습니다.
먼저 위에서 사용한 샘플 테이블을 삭제하고 다시 만들겠습니다.
샘플 테이블 삭제
DROP TABLE TBL_USER
샘플 테이블 생성
CREATE TABLE TBL_USER
(
UserNo int NOT NULL DEFAULT (0),
Name nvarchar(20) NOT NULL DEFAULT (''),
Addr nvarchar(50) NOT NULL DEFAULT (''),
Tel nvarchar(15) NOT NULL DEFAULT (''),
CONSTRAINT TBL_USER_PK PRIMARY KEY CLUSTERED
(
UserNo
)
)
샘플 데이터 등록
INSERT INTO TBL_USER (UserNo, Name, Addr, Tel) VALUES (1, N'이름 1', N'주소 1', N'전화번호 1')
INSERT INTO TBL_USER (UserNo, Name, Addr, Tel) VALUES (2, N'이름 2', N'주소 2', N'전화번호 2')
INSERT INTO TBL_USER (UserNo, Name, Addr, Tel) VALUES (3, N'이름 3', N'주소 3', N'전화번호 3')
INSERT INTO TBL_USER (UserNo, Name, Addr, Tel) VALUES (4, N'이름 4', N'주소 4', N'전화번호 4')
INSERT INTO TBL_USER (UserNo, Name, Addr, Tel) VALUES (5, N'이름 5', N'주소 5', N'전화번호 5')
유저 테이블을 생성하고 확인을 위해 테이터를 작성했습니다.
Name과 Addr 컬럼 사이에 Age컬럼을 추가하도록 하겠습니다.
원하는 위치에 컬럼 추가 예제
-- ①TBL_USER 테이블 데이터를 임시 테이블 #Temp에 복사
SELECT * INTO #Temp FROM TBL_USER
-- ②TBL_USER 테이블 삭제
DROP TABLE TBL_USER
-- ③Age 컬럼을 추가해 TBL_USER 테이블 생성
CREATE TABLE TBL_USER
(
UserNo int NOT NULL DEFAULT (0),
Name nvarchar(20) NOT NULL DEFAULT (''),
Age int NOT NULL DEFAULT (0),
Addr nvarchar(50) NOT NULL DEFAULT (''),
Tel nvarchar(15) NOT NULL DEFAULT (''),
CONSTRAINT TBL_USER_PK PRIMARY KEY CLUSTERED
(
UserNo
)
)
-- ④임시 테이블 #Temp에서 TBL_USER 테이블로 데이터 복원
INSERT INTO TBL_USER
SELECT
Tmp.UserNo,
Tmp.Name,
0,
Tmp.Addr,
Tmp.Tel
FROM #Temp Tmp
-- ⑤임시 테이블 #Temp 삭제
DROP TABLE #Temp
결과
처리를 내용을 보면 TBL_USER 테이블에 저장되어 있는 데이터를 임시 테이블에 복사합니다.
그리고 TBL_USER 테이블을 삭제합니다.
Age컬럼이 추가된 CREATE 문을 실행해 TBL_USER 테이블을 생성합니다.
새로 생성된 TBL_USER 테이블에 임시 테이블에 저장한 데이터를 복사해옵니다.
샘플에서는 간단하게 작성했지만 BEGIN TRANSACTION, COMMIT TRANSACTION, ROLLBACK TRANSACTION을 같이 사용하면 좋습니다.
댓글