在工作中,我们需要对许多数据库进行相同的操作。我想编写1个SP来循环操作并在循环开始时设置数据库(示例如下)。我已经尝试了sp_executesql('USE'+ @db_id)但只设置了该存储过程范围的数据库。我真的不想用硬编码的数据库名称循环,因为我们需要在许多不同的地方做类似的事情,如果我们添加另一个数据库,很难记住需要改变的地方。
任何想法>
例:
DECLARE zdb_loop CURSOR FAST_FORWARD FOR
通过db_id
OPEN zdb_loop FETCH NEXT FROM zdb_loop INTO @db_id
WHILE @@ FETCH_STATUS = 0 开始 使用@db_id
--Do stuff against 3 or 4 different DBs
FETCH NEXT FROM zdb_loop INTO @db_id
END
关闭zdb_loop DEALLOCATE zdb_loop
答案 0 :(得分:0)
您可以使用存储过程sp_MSforeachdb:
此示例将执行数据库 备份,然后是“DBCC CHECKDB” 每个数据库:
declare @cmd1 varchar(500)
declare @cmd2 varchar(500)
declare @cmd3 varchar(500)
set @cmd1 =
'if ''?'' <> ''tempdb'' print ''*** Processing DB ? ***'''
set @cmd2 = 'if ''?'' <> ''tempdb'' backup database ? to disk=''c:\temp\?.bak'''
set @cmd3 = 'if ''?'' <> ''tempdb'' dbcc checkdb(?)'
exec sp_MSforeachdb @command1=@cmd1,
@command2=@cmd2,
@command3=@cmd3
答案 1 :(得分:0)
到目前为止看起来像动态SQL是唯一的方法。很蹩脚。