동적으로 컬럼을 추가하는 경우는 거의 없지만, 가끔은 필요할 때가 있다.
하여 테스트를 하였다.
결과 : 일반테이블이나 임시테이블은 가능하다 하지만, 테이블 변수는 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;
'IT > MSSQL' 카테고리의 다른 글
FROM TO 기간안에 특정 요일별 날짜 추출 (0) | 2018.03.07 |
---|---|
mssql 날짜 포맷 모음 (0) | 2018.02.28 |
MSSQL 반올림, 자르기(절삭), 올림, 내림 (0) | 2018.02.19 |
십단위 올림 (0) | 2018.02.19 |
로우 합치기 (0) | 2018.02.02 |