如何在一小时后重置数据库中的数据

时间:2015-02-14 15:14:59

标签: sql-server database

我在服务器上有一个项目,它是一个演示。

用户可以在面板中查看演示面板并添加和删除数据,我希望每个数据库中的数据都被重置,并且所有记录都被用户恢复删除,并删除用户将其添加到数据库的所有记录。

你有什么想法吗? 我的项目:ASP.net Web表单,SQL Server 2012

1 个答案:

答案 0 :(得分:0)

您需要创建另外10个表来保存将用于刷新数据的默认数据。让我们称它们为TableName1_Holding,TableName2_Holding,TableName3_Holding,....等等....

现在创建一个Sql Agent作业,其中包含以下代码。

IF OBJECT_ID('tempdb..#tables') IS NOT NULL 
 DROP TABLE #tables
GO

CREATE TABLE #tables (TableName NVARCHAR(256) , Holding_TableName NVARCHAR(256))
GO

INSERT INTO #tables
SELECT QUOTENAME(s.name) + '.' + QUOTENAME(t.name) AS TableName
      ,QUOTENAME(s.name) + '.' + QUOTENAME(t.name + N'_Holding') AS Holding_TableName
FROM sys.tables t 
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name IN 
      (N'table1'      --<-- the 10 tables you want to refresh
     , N'table2' 
     , N'table3')  


DECLARE @Sql            NVARCHAR(MAX);
DECLARE @Table          NVARCHAR(256);
DECLARE @Table_Holiding NVARCHAR(256);  --<-- Tables that hold data you want to refresh from

DECLARE Cur CURSOR LOCAL FORWARD_ONLY FOR 
SELECT TableName , Holding_TableName
FROM #tables

OPEN Cur 
FETCH NEXT FROM Cur INTO @Table , @Table_Holiding

WHILE (@@FETCH_STATUS = 0)
 BEGIN

    SET @Sql = N' TRUNCATE TABLE ' + @Table           --<-- Truncate the tables 
             + N' INSERT INTO ' + @Table              --<-- Refresh data from holiding tables
             + N' SELECT * FROM ' + @Table_Holiding

--    Exec sp_executesql @Sql 

   PRINT @Sql    --<-- test it first to see it is targeting the correct tables. 

    FETCH NEXT FROM Cur INTO @Table , @Table_Holiding

 END

CLOSE Cur;
DEALLOCATE Cur;
GO