0

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

谢谢

4

1 回答 1

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 文件,该文件将准备好重新附加和完美地重用

于 2012-05-24T18:42:04.750 回答