beg*_*ge1 6 sql-server sql-server-2016
我正在执行一项需要在另一个实例中备份和恢复数据库的任务。
但是,当我恢复那个数据库时,我需要删除所有与临时表关联的历史表。
有没有快速的方法来做到这一点?任何帮助表示赞赏。
我相信这就是你所需要的。
SET NOCOUNT ON ;
DECLARE @cmd NVARCHAR (MAX);
DECLARE
@SchemaName VARCHAR(100),
@TableName VARCHAR(100),
@HistorySchemaName VARCHAR(100),
@HistoryTableName VARCHAR(100);
SET @cmd = '' ;
SELECT TOP ( 1 )
@SchemaName = SCHEMA_NAME(T1.schema_id ),
@TableName = T1 .name,
@HistorySchemaName = SCHEMA_NAME(T2.schema_id ),
@HistoryTableName = T2 .name
FROM sys .tables T1
LEFT JOIN sys .tables T2
ON T1.history_table_id = T2 .object_id
WHERE T1. temporal_type = 2
ORDER BY T1. name;
WHILE @@ROWCOUNT = 1
BEGIN
SET @cmd = 'ALTER TABLE ' + QUOTENAME (@SchemaName ) + '. ' + QUOTENAME(@TableName) + ' SET ( SYSTEM_VERSIONING = OFF );
DROP TABLE ' + QUOTENAME (@HistorySchemaName ) + '.' + QUOTENAME(@HistoryTableName );
EXEC sp_executesql @cmd
SELECT TOP ( 1 )
@SchemaName = SCHEMA_NAME(T1.schema_id ),
@TableName = T1 .name,
@HistorySchemaName = SCHEMA_NAME(T2.schema_id ),
@HistoryTableName = T2 .name
FROM sys.tables T1
LEFT JOIN sys.tables T2
ON T1 .history_table_id = T2 .object_id
WHERE
T1 .temporal_type = 2
AND T1 .name > @TableName
ORDER BY T1 .name;
END;
Run Code Online (Sandbox Code Playgroud)