MSSQL 컬럼 추가 순서 - MSSQL keolleom chuga sunseo

SQL Server에서 기본 테이블에 컬럼을 추가하는 방법은 ALTER를 사용합니다.

ALTER 기본 사용 방법

ALTER TABLE '테이블 이름' ADD '컬럼 이름' '데이터 타입' 'NULL or NOT NULL'

샘플 테이블을 만들어 컬럼을 추가해보겠습니다.

샘플 테이블 생성

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 ) )

MSSQL 컬럼 추가 순서 - MSSQL keolleom chuga sunseo

유저 정보를 등록하는 테스트용 테이블을 만들었습니다.

하지만 유저 테이블에 나이를 저장할 컬럼이 없습니다.

추가해보도록 하겠습니다.

컬럼 추가 샘플

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을 같이 사용하면 좋습니다.