0

こんにちは 1 つの Java アプリケーションを実装しています。アプリケーションはデバイスからデータを読み取り、データベースに保存します。ここで私の質問は、データを保存してからわずか 1 か月後に削除されますが、CD にバックアップするか、ファイルに書き込むことです。顧客が 3 か月前のデータを尋ねたとします。Sqlサーバー2005を使用してそのデータを再処理する方法.その方法を教えてください..

ありがとう

4

1 に答える 1

0

1 か月の履歴のみを保持するデータベースを作成し、必要な場合に備えてそれらを結合したいだけなのかどうかはわかりません。この場合、次のようにします。

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 に答える