现有表A数据如下----------------------------
datetime value
2010-03-01 33
2010-03-02 35
..................
2011-01-03 35
----------------------------
其中datetime字段是日期类型。
因为现在表中数据太多,我想将这个表的数据分割为多个表存储,分割后表名为“A+年份+月份”的格式,如“A201003”。现在想写一个存储过程来分割这个表,请问有没有什么好的方法。
datetime value
2010-03-01 33
2010-03-02 35
..................
2011-01-03 35
----------------------------
其中datetime字段是日期类型。
因为现在表中数据太多,我想将这个表的数据分割为多个表存储,分割后表名为“A+年份+月份”的格式,如“A201003”。现在想写一个存储过程来分割这个表,请问有没有什么好的方法。
declare @table varchar(10)
declare @rq varchar(6)
select CONVERT(varchar(6),time,112) AS rq,ROW_NUMBER()OVER(ORDER BY CONVERT(varchar(6),time,112)) AS rn into #t from tb group by CONVERT(varchar(6),time,112) ORDER BY CONVERT(varchar(6),time,112)
select @i=COUNT(*) from #t
while @i>0
begin
select @rq=rq from #t where rn=@i
set @table='A'+@rq
exec ('SELECT * INTO '+@table+' FROM tb WHERE CONVERT(varchar(6),time,112)='+@rq+'')
SET @i=@i-1
end
(
date datetime,
value int
)
insert into data
select '2010-03-01', 1 union all
select '2010-03-02', 2 union all
select '2010-04-01', 3 union all
select '2010-05-01', 4
select * from data
------------------------------
CREATE PROCEDURE proc_month
AS
DECLARE @year INT
DECLARE @month INT
DECLARE @table_name VARCHAR(100) DECLARE cursor_month CURSOR FOR
SELECT DISTINCT year = DATEPART(YEAR, date), month = DATEPART(MONTH, date) FROM data OPEN cursor_month
FETCH NEXT FROM cursor_month INTO @year, @month WHILE @@FETCH_STATUS = 0
BEGIN
SET @table_name = 'A'+ CAST(@year AS VARCHAR(4)) + RIGHT('0' + CAST(@month AS VARCHAR(2)), 2)
EXEC('SELECT * INTO ' + @table_name + ' FROM data WHERE DATEPART(YEAR, date) = ' + @year + ' AND DATEPART(MONTH, date) = ' + @month)
FETCH NEXT FROM cursor_month INTO @year, @month
END CLOSE cursor_month
DEALLOCATE cursor_month
--test
EXEC proc_monthSELECT * FROM A201003
SELECT * FROM A201004
SELECT * FROM A201005
select * into t_201004 from tb where convert(varchar(7),datetime,120) = '2010-04'
...