Monday, July 31, 2017

▷ Mssql data reduction (MSSQL 데이터 축소하기)

[ Mssql data reduction ]


/*
@NAME : DATA_REDUCT
@DESC : 데이터 축소를 위한 SP

@USAGE: exec DATA_REDUCT 'TableA|TableB|TableC','|',6,'yyyymmdd',120
@파라미터 설정 예시
        : 'TableA|TableB|TableC' -- 테이블 목록
        : '|' -- 테이블 구분자
        : 6 -- 데이터보관기간
        : 'yyyymmdd' -- 날짜 필드명
        : 120 -- 날짜 표현 형식 ([111]2008/08/28, [112]20080828, [120]2008-08-28 10:12:31)
*/

SET ANSI_NULLS ON
GO

create proc DATA_REDUCT (
@table_lists nvarchar(128), -- 데이터축소를 위한 테이블목록 (구분자포함)
@dm nchar(1), -- 테이블 구분자
@period int, -- 데이터보관 최소기간(Months)
@col_name nvarchar(30), -- 날짜형식의 필드명
@style_date int -- 날짜의 표현 형식
)
AS
BEGIN

-- (1개 행 적용됨) 와 같은 메세지를 보이지 않게 하기 위함
set nocount on

declare @yyyymmdd nvarchar(10) -- 데이터축소기준일
declare @table_pos int -- 반복을 위한 테이블 위치
declare @table_name nvarchar(128) -- 테이블명
declare @strsql nvarchar(512) -- 문자열쿼리

/* -- 테스트
set @table_lists='TableA|TableB|TableC'
set @period=6
set @dm='|'
set @col_name='yyyymmdd'
set @style_date=120
*/
-- 데이터축소 기준일
if (@style_date=112)
set @yyyymmdd=convert(varchar(6), dateadd(m, -@period, getdate()), @style_date)+'01'
else if (@style_date in (111,120,121))
set @yyyymmdd=convert(varchar(8), dateadd(m, -@period, getdate()), @style_date)+'01'

-- 문자열 쿼리
set @strsql='delete from '
-- 데이터 축소를 위한 조건 문자열 쿼리 (where절)
declare @where nvarchar(128)
set @where=' where ' + @col_name + ' < '

-- 1ST 테이블
set @table_pos=1
set @table_name=dbo.fn_ctgcut(@table_lists, @dm, @table_pos)

while (@table_name<>'')
begin
--select @table_name as table_name
set @strsql = @strsql + @table_name + @where + '''' + @yyyymmdd + ''''
--print(@strsql)
exec(@strsql)

-- Nth 테이블
set @table_pos=@table_pos+1
set @table_name=dbo.fn_ctgcut(@table_lists, @dm, @table_pos)
-- 문자열 쿼리(초기화)
set @strsql='delete from '
end

SET NOCOUNT OFF

END;

SET ANSI_NULLS ON
GO

No comments:

Post a Comment

◈ Recent Post

▷ UITest demo with TestOne (Mobile, Keypad and Drag until found tip)

[ UITest Demo Environment ] 1. UITest Solution: TestOne 2. Description 데모 설명    How to use keypad, and to drag until found.     키패드를...

◈ Popular Posts