2012-05-24 2 views
0

HI Внедрение одного приложения Java. Приложение будет считывать данные с устройств и хранить их в базе данных. Здесь мой вопрос: я сохранил данные только через 1 месяц после этого, но будет удален, но у меня есть резервная копия на компакт-диске или запись в файлы. предположим, что клиент запросил данные за 3 месяца назад. Как я повторно обработать эти данные с помощью SQL Server 2005. Пожалуйста, дайте мне идею, как сделать это ..Как перепрограммировать старые необработанные данные из одной таблицы в другую?

Благодаря

ответ

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 ['[email protected]+'] ON PRIMARY (NAME = N'''[email protected]+''', FILENAME =  N''X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'[email protected]+'.mdf'' , SIZE = 2048KB ,  FILEGROWTH = 1024KB) LOG ON (NAME = N'''[email protected]+'_log'', FILENAME =  N''X:\SOMEPLACE\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\'[email protected]+'_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 '[email protected]) 
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 @[email protected]+' UNION ALL ' 
    SET @[email protected]+'SELECT * FROM '[email protected]+'.DATATBL' 
    SET @[email protected]+1 
END 
SELECT @SCR 
EXEC @SCR 

Я бы не рекомендовал демпинг в текстовый файл вместо Ther будет очевидным влияние с точки зрения производительности - в конце концов, вы все равно можете снять/подпорка мдф файл который будет готов к повторному подключению и повторному использованию

Смежные вопросы