IT/MSSQL
ALTER TABLE (동적으로 테이블에 컬럼 추가)
밤톨순이
2018. 3. 29. 16:53
동적으로 컬럼을 추가하는 경우는 거의 없지만, 가끔은 필요할 때가 있다.
하여 테스트를 하였다.
결과 : 일반테이블이나 임시테이블은 가능하다 하지만, 테이블 변수는 ALTER TABLE 문이 실행되지 않아 못함.
임시테이블의 동적 컬럼 추가는 하기와 같다.
IF OBJECT_ID('tempdb..#RESULT_TABLE', 'U') IS NOT NULL
DROP TABLE #RESULT_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 #RESULT_TABLE ( TempColumn INT );
DECLARE @SQL NVARCHAR(200);
SET @SQL = 'ALTER TABLE #RESULT_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 #RESULT_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 #RESULT_TABLE;
IF OBJECT_ID('tempdb..#RESULT_TABLE', 'U') IS NOT NULL
DROP TABLE #RESULT_TABLE;