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;