SQL SERVER迁移数据并删除历史记录

USE [bak]
GO
/****** Object:  StoredProcedure [dbo].[pro_pay591_J_orderlog_clear]    Script Date: 08/07/2013 13:53:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  <myun>
-- Create date: <2013-08-07>
-- Description: <清理主数据库订单日志>
-- =============================================
ALTER PROCEDURE [dbo].[pro_pay_orderlog_clear] 
 @dt_end datetime --清理此日期之前的数据
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

   declare @sqlstr varchar(8000)
declare @table_name varchar(30)
declare @theday datetime
set @theday = dateadd(month,-1,@dt_end)
set @table_name = 'ORDER_LOG_BACK_'+ltrim(year(@theday-1))+substring(ltrim(month(@theday-1)+100),2,2)

set @sqlstr = '

BEGIN
CREATE TABLE [dbo].'+@table_name+'(
 [id] [bigint] NOT NULL,
 [order_id] [bigint] NULL,
 [op_type] [tinyint] NULL,
 [ip] [varchar](50) NULL,
 [login_name] [varchar](50) NULL,
 [org_data] [varchar](1024) NULL,
 [new_data] [varchar](1024) NULL,
 [op_time] [datetime] NULL CONSTRAINT [DF__'+@table_name+'__op_ti__4222D4EF]  DEFAULT (getdate()),
 [remark] [varchar](8000) NULL,
 CONSTRAINT [PK_'+@table_name+'] PRIMARY KEY CLUSTERED 
(
 [id] Desc
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
'

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@table_name) AND type in (N'U'))
exec(@sqlstr)

set @sqlstr = '

delete  from pay.dbo.ORDER_LOG
output deleted.*
 into  '+@table_name+' ([id]
           ,[order_id]
           ,[op_type]
           ,[ip]
           ,[login_name]
           ,[org_data]
           ,[new_data]
           ,[op_time]
           ,[remark])
where [op_time] < '''+convert(varchar(20),@theday)+''''
exec(@sqlstr)
END

 

 

 

 

你可能感兴趣的:(SQL SERVER迁移数据并删除历史记录)