SQL Server直接该表旧表名称作为备份,并创建新表和查询视图链接多表查询
为了解决大量数据复制造成的数据库超时无法使用的问题,可以采用用另一种方式,将由数据库的表直接修改名称,再创建表,并加入多表联合查询视图解决大数据量转移的问题
CREATE PROCEDURE [dbo].[Pro_BakTable] AS BEGIN --当前表的数量 DECLARE @TABLENAMESCOUNT INT --新表名称 DECLARE @NEWTABLENAME VARCHAR(500) --新索引名称 DECLARE @NEWPKNAME VARCHAR(500) --WHILE循环索引 DECLARE @WHILEINDEX INT --创建视图的语句 DECLARE @CREATEVIEWSQL VARCHAR(MAX) --设置创建视图语句初始值 SET @CREATEVIEWSQL='CREATE VIEW fetch_log AS SELECT * FROM Scan_Log ' --设置循环初始值 SET @WHILEINDEX=1 --LOG表的数量 SELECT @TABLENAMESCOUNT=COUNT(*) FROM SYS.TABLES WHERE name like'Scan_Log%' --LOG表名称保存到临时表A中 SELECT ROW_NUMBER() OVER(ORDER BY NAME) ROWID,* INTO #A FROM SYS.TABLES WHERE name like'Scan_Log%' --新表名称 SET @NEWTABLENAME='Scan_Log'+CONVERT(varchar,@TABLENAMESCOUNT) --新主键索引名称 SET @NEWPKNAME='PK_Scan_Log'+CONVERT(varchar,@TABLENAMESCOUNT) --修改主键索引名称 EXEC sp_rename 'Scan_Log.PK_Scan_Log',@NEWPKNAME --修改表名 EXEC sp_rename 'Scan_Log',@NEWTABLENAME --执行创建表存储过程 EXEC create_Scanlog --组合视图创建语句 WHILE @WHILEINDEX<=@TABLENAMESCOUNT BEGIN DECLARE @TTABLENAME NVARCHAR(100) SELECT @TTABLENAME=NAME FROM #A WHERE ROWID=@WHILEINDEX --原始表已经添加无需再加入 IF @TTABLENAME<>'Scan_Log' SET @CREATEVIEWSQL=@CREATEVIEWSQL+' UNION SELECT * FROM '+@TTABLENAME SET @WHILEINDEX=@WHILEINDEX+1; END --判断数据库中是否有fetch_log视图 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = N'fetch_log') BEGIN --如果有删除视图 DROP VIEW fetch_log END --执行创建新视图语句 EXEC(@CREATEVIEWSQL) END

浙公网安备 33010602011771号