MSSQL 테이블칼럼 동적 추가
자동으로 배치를 돌려서 통계를 생성하는 등의 작업에서 특정 테이블의 칼럼을 Alter Table 쿼리문을 사용하여 칼럼을 동적으로 생성해줘야하는 작업이 있습니다.
동적쿼리가 보안에 취약하여 많이 사용하지는 않지만, 그래도 종종 어쩔수 없이 사용하는 경우들이 있어 오늘은 MSSQL 테이블칼럼 동적 추가에 대해서 몇자 적어보겠습니다.
들어가기에 앞서 주의 사항이 있습니다.
주의 : 테이블변수에는 Alter Table 명령이 실행되지 않습니다.
MSSQL에는 테이블에 대한 정의가 4가지 있습니다.
일반테이블, 전역 임시 테이블, 지역 임시 테이블, 테이블변수 이렇게 4가지가 있는데, 결론부터 말씀드리면 4가지 테이블 중에서 앞의 일반테이블, 전역 임시 테이블, 지역 임시 테이블 테이블에만 Alter Table 명령이 실행되고 나머지 하나인 테이블변수에는 실행되지 않습니다.
IF OBJECT_ID('tempdb..#TEST_TABLE', 'U') IS NOT NULL
DROP TABLE #TEST_TABLE;
DECLARE
@ColumnName01 VARCHAR(50)
, @ColumnName02 VARCHAR(50)
, @ColumnName03 VARCHAR(50)
, @ColumnName04 VARCHAR(50);
SELECT
@ColumnName01 = '[Sales Person]'
, @ColumnName02 = '[' + DATENAME(MONTH, GETDATE()) + ' Sales]'
, @ColumnName03 = '[' + DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE())) + ' Sales]'
, @ColumnName04 = '[' + DATENAME(MONTH, DATEADD(MONTH, -2, GETDATE())) + ' Sales]';
CREATE TABLE #TEST_TABLE ( TempColumn INT );
DECLARE @SQL NVARCHAR(200);
SET @SQL = 'ALTER TABLE #TEST_TABLE ADD ';
SET @SQL += @ColumnName01 + ' VARCHAR(50) NULL, ';
SET @SQL += @ColumnName02 + ' MONEY NULL, ';
SET @SQL += @ColumnName03 + ' MONEY NULL, ';
SET @SQL += @ColumnName04 + ' MONEY NULL ';
EXEC sys.sp_executesql @SQL;
INSERT INTO #TEST_TABLE
VALUES
( 'Eric', '120.01', '200.32', '345.00' )
, ( 'Ralph', '132.03', '33.3', '341.13' ),
( 'David', '987.3', '30.77', '879.00' );
SELECT * FROM #TEST_TABLE;
IF OBJECT_ID('tempdb..#TEST_TABLE', 'U') IS NOT NULL
DROP TABLE #TEST_TABLE;
이상으로 MSSQL 테이블칼럼 동적 추가에 대해서 알아보았습니다.
동적쿼리가 보안에 취약하여 많이 사용하지는 않지만, 그래도 종종 어쩔수 없이 사용하는 경우들이 있어 오늘은 MSSQL 테이블칼럼 동적 추가에 대해서 몇자 적어보겠습니다.
들어가기에 앞서 주의 사항이 있습니다.
주의 : 테이블변수에는 Alter Table 명령이 실행되지 않습니다.
MSSQL에는 테이블에 대한 정의가 4가지 있습니다.
일반테이블, 전역 임시 테이블, 지역 임시 테이블, 테이블변수 이렇게 4가지가 있는데, 결론부터 말씀드리면 4가지 테이블 중에서 앞의 일반테이블, 전역 임시 테이블, 지역 임시 테이블 테이블에만 Alter Table 명령이 실행되고 나머지 하나인 테이블변수에는 실행되지 않습니다.
▶ 작업 쿼리
-- 임시 테이블 존재여부 체크 후 삭제IF OBJECT_ID('tempdb..#TEST_TABLE', 'U') IS NOT NULL
DROP TABLE #TEST_TABLE;
DECLARE
@ColumnName01 VARCHAR(50)
, @ColumnName02 VARCHAR(50)
, @ColumnName03 VARCHAR(50)
, @ColumnName04 VARCHAR(50);
SELECT
@ColumnName01 = '[Sales Person]'
, @ColumnName02 = '[' + DATENAME(MONTH, GETDATE()) + ' Sales]'
, @ColumnName03 = '[' + DATENAME(MONTH, DATEADD(MONTH, -1, GETDATE())) + ' Sales]'
, @ColumnName04 = '[' + DATENAME(MONTH, DATEADD(MONTH, -2, GETDATE())) + ' Sales]';
CREATE TABLE #TEST_TABLE ( TempColumn INT );
DECLARE @SQL NVARCHAR(200);
SET @SQL = 'ALTER TABLE #TEST_TABLE ADD ';
SET @SQL += @ColumnName01 + ' VARCHAR(50) NULL, ';
SET @SQL += @ColumnName02 + ' MONEY NULL, ';
SET @SQL += @ColumnName03 + ' MONEY NULL, ';
SET @SQL += @ColumnName04 + ' MONEY NULL ';
EXEC sys.sp_executesql @SQL;
INSERT INTO #TEST_TABLE
VALUES
( 'Eric', '120.01', '200.32', '345.00' )
, ( 'Ralph', '132.03', '33.3', '341.13' ),
( 'David', '987.3', '30.77', '879.00' );
SELECT * FROM #TEST_TABLE;
IF OBJECT_ID('tempdb..#TEST_TABLE', 'U') IS NOT NULL
DROP TABLE #TEST_TABLE;
이상으로 MSSQL 테이블칼럼 동적 추가에 대해서 알아보았습니다.
댓글
댓글 쓰기