SQL server按月建表并添加数据

create procedure pro_SplitMonthData
as--按月份添加分表
declare @sql nvarchar(2000)			--sql语句字串
declare @Table_Status nvarchar(100)  --ProcessStatus分表名称
declare @Table_Code nvarchar(100)	--ProcessCode分表名称
declare @Table_Data nvarchar(100)	--ProcessData分表名称
declare @CurDate datetime			--系统当前时间
set @CurDate = GETDATE()
set @Table_Status=dbo.fn_GetMonthTableName('ProcessStatus')
set @Table_Code=dbo.fn_GetMonthTableName('ProcessCode')
set @Table_Data=dbo.fn_GetMonthTableName('ProcessData')
begin

    ----ProcessStatus分表
	if not exists(select * from sysobjects where xtype='U' and name =@Table_Status)
	begin
		print '-------------1'
	    --添加分表sql
		set @sql = 'select * into ' + @Table_Status + ' from ProcessStatus where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------2'
	end
	else
	begin
	    --删除已有表sql
		print '-------------3'
		set @sql = 'drop table ' + @Table_Status ;
		exec sp_executesql @sql;
		print @sql
		print '-------------4'

		--添加分表sql
		set @sql = 'select * into ' + @Table_Status + ' from ProcessStatus where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------5'
	end

	
    ----ProcessCode分表
	if not exists(select * from sysobjects where xtype='U' and name =@Table_Code)
	begin
		print '-------------11'
	    --添加分表sql
		set @sql = 'select * into ' + @Table_Code + ' from ProcessCode where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------22'
	end
	else
	begin
	    --删除已有表sql
		print '-------------33'
		set @sql = 'drop table ' + @Table_Code ;
		exec sp_executesql @sql;
		print @sql
		print '-------------44'

		--添加分表sql
		set @sql = 'select * into ' + @Table_Code + ' from ProcessCode where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------55'
	end

	
    ----ProcessData分表
	if not exists(select * from sysobjects where xtype='U' and name =@Table_Data)
	begin
		print '-------------111'
	    --添加分表sql
		set @sql = 'select * into ' + @Table_Data + ' from ProcessData where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------222'
	end
	else
	begin
	    --删除已有表sql
		print '-------------333'
		set @sql = 'drop table ' + @Table_Data ;
		exec sp_executesql @sql;
		print @sql
		print '-------------444'

		--添加分表sql
		set @sql = 'select * into ' + @Table_Data + ' from ProcessData where DATEPART(yyyy,create_time) = DATEPART(yyyy,dateadd(m,-1,GETDATE())) and DATEPART(m,create_time) = DATEPART(m,dateadd(m,-1,GETDATE())) ';
		exec sp_executesql @sql;
		print @sql
		print '-------------555'
	end


end
create function [dbo].[fn_GetMonthTableName](@TableName nvarchar(100))
returns varchar(100) --根据tablename创建用于存储上个月数据的分表名称,例如:tablename_20230101
as
begin
	declare @BakTableName varchar(100);
	set @BakTableName = @TableName + '_' + LEFT(CONVERT(CHAR(8), dateadd(m,-1,GETDATE()),112),6) 
	return @BakTableName;
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值