Я не уверен, если вы просто хотите, чтобы создать базы данных хранится только один месяц истории и склеить их вместе в случае необходимости. В этом случае вы можете сделать следующим образом:
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 будет очевидным влияние с точки зрения производительности - в конце концов, вы все равно можете снять/подпорка мдф файл который будет готов к повторному подключению и повторному использованию