使用 sp_MSforeachtable 动态创建 table 备份

Use sp_MSforeachtable for creating table backups dynamicaly

我正在尝试使用 sp_MSforeachtable 通过此查询动态创建备份 table。

exec sp_MSforeachtable
@command1='Print ''[?_bckp]''', 
@command2='select * into ''[?_bckp_2022]'''' from ?;'
@whereand=' and o.Name in (
''<table list>''
) 
and schema_name(schema_id) = ''dbo''' 

我收到@whereand 的错误,但我认为这是一个虚假错误。我认为问题出在 [?_bckp_2022] 的 command2 中。 table 名称来自 command1,看起来像 [[dbo]].[table_name]]_bckp]。我认为在 command2 中生成的 sql 命令导致了执行阶段的错误。 我的问题是:

  1. 我做错了什么?
  2. 如何从 command2 中 table 生成的名称中删除架构?

谢谢

如评论中所述,使用 sys.tables 更容易。

使用string_agg连接动态命令并exec()执行它

declare @sql nvarchar(max);

select  @sql    = string_agg ('select * into ' + quotename(name + '_bckp_2002') + ' from ' + quotename(name), ';' + char(13))
from    sys.tables t

print   @sql
exec    (@sql)

您可以在 WHERE 子句中轻松过滤所需的表格

少了一个逗号。谢谢大家