You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于T-SQL遍历指定表生成新架构下的备份

遍历ETL开头表并备份至historic架构的实现方法

方法一:使用游标自动遍历执行

通过游标逐个读取目标表名,拼接动态SQL并执行备份操作:

-- 声明变量存储表名和动态SQL语句
DECLARE @table_name NVARCHAR(128)
DECLARE @sql NVARCHAR(MAX)

-- 定义游标,获取所有以ETL开头的表名
DECLARE table_cursor CURSOR FOR
SELECT name
FROM sys.tables
WHERE name LIKE 'ETL%'

-- 打开游标并开始遍历
OPEN table_cursor
FETCH NEXT FROM table_cursor INTO @table_name

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 拼接备份SQL,处理表名的方括号转义
    SET @sql = N'SELECT * INTO [historic].[' + @table_name + N'] FROM [' + @table_name + N']'
    
    -- 执行动态SQL
    EXEC sp_executesql @sql

    -- 读取下一个表名
    FETCH NEXT FROM table_cursor INTO @table_name
END

-- 清理游标资源
CLOSE table_cursor
DEALLOCATE table_cursor

方法二:批量生成备份语句手动执行

如果需要先预览所有备份语句再执行,可以生成对应的SQL脚本:

-- 生成所有表的备份语句
SELECT N'SELECT * INTO [historic].[' + name + N'] FROM [' + name + N']' AS backup_sql
FROM sys.tables
WHERE name LIKE 'ETL%'

执行后将结果集中的backup_sql列内容复制出来,批量执行即可。

注意事项

  • 确保historic架构已存在,若不存在需先执行:CREATE SCHEMA historic;
  • 执行账号需具备源表读取权限和historic架构下的建表权限
  • 若目标表已存在,SELECT INTO会报错,可在拼接SQL时添加DROP TABLE IF EXISTS [historic].[' + @table_name + N'];语句先删除旧表

内容的提问来源于stack exchange,提问作者holyshilo111

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:33:16