使用 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 命令导致了执行阶段的错误。
我的问题是:
- 我做错了什么?
- 如何从 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
子句中轻松过滤所需的表格
少了一个逗号。谢谢大家
我正在尝试使用 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 命令导致了执行阶段的错误。 我的问题是:
- 我做错了什么?
- 如何从 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
子句中轻松过滤所需的表格
少了一个逗号。谢谢大家