我在服务器上有一个项目,它是一个演示。
用户可以在面板中查看演示面板并添加和删除数据,我希望每个数据库中的数据都被重置,并且所有记录都被用户恢复删除,并删除用户将其添加到数据库的所有记录。
你有什么想法吗? 我的项目:ASP.net Web表单,SQL Server 2012答案 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