如何将旧的原始数据从一个表重新处理到另一个表?

时间:2012-05-24 17:56:33

标签: java sql-server

HI我实现了一个java应用程序。应用程序将从设备读取数据并存储到数据库中。在这里,我的问题是我已经存储数据仅一个月后它将被删除,但我有CD备份或写入文件。假设客户询问了3个月的数据。我如何使用Sql server 2005重新处理该数据。请告诉我如何做到这一点..

由于

1 个答案:

答案 0 :(得分:0)

我不确定您是否只想创建仅保留一个月历史记录的数据库并将它们粘合在一起以备不时之需。 在这种情况下,您可以执行以下操作:

CREATE DATABASE [TEST] ON  PRIMARY 
( NAME = N'TEST', FILENAME = X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST.mdf' , SIZE = 2048KB , FILEGROWTH = 1024KB )
 LOG ON ( NAME = N'TEST_log', FILENAME = X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST_log.ldf' , SIZE = 1024KB , FILEGROWTH =     10%)
GO
USE TEST
CREATE TABLE DATATBL (USRKEY INT IDENTITY(1,1), SOMEDATA VARCHAR(50))
/* IN A SQL SERVER AGENT SCRIPT YOU SCHEDULE TO RUN THE END OF THE MONTH*/
GO
DECLARE @DBNAME VARCHAR(50)
SELECT @DBNAME ='TEST_HIST_' + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(4)) + '_' +CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR(2))
EXEC(
'CREATE DATABASE ['+@DBNAME+'] ON  PRIMARY ( NAME = N'''+@DBNAME+''', FILENAME =     N''X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'+@DBNAME+'.mdf'' , SIZE = 2048KB ,     FILEGROWTH = 1024KB )  LOG ON  ( NAME = N'''+@DBNAME+'_log'', FILENAME =     N''X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'+@DBNAME+'_log.ldf'' , SIZE = 1024KB ,     FILEGROWTH = 10%) ')
GO
DECLARE @DBNAME VARCHAR(50)

BEGIN TRANSACTION

SELECT @DBNAME ='TEST_HIST_' + CAST(DATEPART(YEAR,GETDATE()) AS VARCHAR(4)) + '_' +CAST(DATEPART(MONTH,GETDATE()) AS VARCHAR(2))
 EXEC('USE '+@DBNAME)
CREATE TABLE DATATBL (USRKEY INT , SOMEDATA VARCHAR(50))
INSERT INTO DATATBL SELECT * FROM TEST.DATATBL
DELETE FROM DATATBL

COMMIT TRANSACTION

/* ACCESSING DATA*/
GO
DECLARE @SCR VARCHAR(MAX)='SELECT * FROM TEST.DATATBL'
DECLARE @GETTOTMONTHS INT=3
DECLARE @CUR INT=0
DECLARE @CURDB VARCHAR(50)
DECLARE @REFDATE DATE=DATEADD(MONTH,DATEPART(MONTH,GETDATE()),DATEADD(YEAR,DATEPART(YEAR,GETDATE()),0))
WHILE @CUR<@GETTOTMONTHS
BEGIN
    SET @REFDATE=DATEADD(MONTH,-1,@REFDATE)
    SET @CURDB = 'TEST_HIST_' + CAST(DATEPART(YEAR,@REFDATE) AS VARCHAR(4)) + '_' + CAST    (DATEPART(MONTH,@REFDATE) AS VARCHAR(2))
    IF @SCR>'' SET @SCR=@SCR+' UNION ALL '
    SET @SCR=@SCR+'SELECT * FROM '+@CURDB+'.DATATBL'
    SET @CUR=@CUR+1
END
SELECT @SCR
EXEC @SCR

我不建议转储到文本文件中,否则会对性能产生明显的影响 - 毕竟,您仍然可以分离/备份mdf文件,该文件已准备好重新连接并完美无缺地重复使用