在SQL Server 2000中动态更改数据库

时间:2010-04-30 20:24:06

标签: sql-server-2000 dynamic-sql

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

任何想法>

例:
DECLARE zdb_loop CURSOR FAST_FORWARD FOR 通过db_id

从DBS顺序中选择不同的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

2 个答案:

答案 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是唯一的方法。很蹩脚。