1

在工作中,我们需要对许多数据库执行相同的操作。我想编写 1 个 SP 来循环操作并将数据库设置在循环的开头(示例如下)。我试过 sp_executesql('USE ' + @db_id) 但这只是为该存储过程的范围设置数据库。我真的不想用硬编码的数据库名称循环,因为我们需要在许多不同的地方做类似的事情,如果我们添加另一个数据库,很难记住需要更改的地方。

任何想法>

示例:
DECLARE zdb_loop CURSOR FAST_FORWARD FOR SELECT distinct db_id from DBS order by db_id

OPEN zdb_loop FETCH NEXT FROM zdb_loop INTO @db_id

当@@FETCH_STATUS = 0 开始使用@db_id

--Do stuff against 3 or 4 different DBs

FETCH NEXT FROM zdb_loop INTO @db_id

结尾

关闭 zdb_loop DEALLOCATE zdb_loop

4

2 回答 2

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
于 2010-04-30T20:29:56.480 回答
0

到目前为止,动态 SQL 似乎是做到这一点的唯一方法。很蹩脚。

于 2011-05-26T14:17:19.317 回答