[ 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