1

職場には、同じ操作を実行する必要のあるデータベースがいくつかあります。操作をループし、ループの最初にデータベースを設定する1つのSPを作成したいと思います(次の例)。sp_executesql('USE' + @db_id)を試しましたが、それはそのストアドプロシージャのスコープのDBのみを設定します。多くの異なる場所で同様のことを行う必要があり、別のDBを追加した場合にどこを変更する必要があるかを覚えておくのは難しいため、ハードコードされたデータベース名でループすることはあまりありません。

任意の考え>

例:
DECLARE zdb_loop CURSOR FAST_FORWARD FOR SELECT個別のdb_idとDBSの順序(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

終わり

CLOSE zdb_loop DEALLOCATE zdb_loop

4

2 に答える 2

0

これまでのところ、動的SQLがこれを行う唯一の方法のようです。かなりラメ。

于 2011-05-26T14:17:19.317 に答える
0

これには、ストアドプロシージャsp_MSforeachdbを使用できます。

この例では、データベースのバックアップを実行してから、各データベースに対して「DBCCCHECKDB」を実行します。

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 に答える