2017-12-31 387 views
-1

テーブルにリストした複数のデータベースを使ってクエリをループしようとしていますが、カーソルを使用して新しいデータベース名しかし、私は '@ DBName'の近くで誤った構文を得ています。これを行う方法はありますか?以下は私の試みです。私は、テーブルに格納呼ばIndexOverview_FragLevelsカーソルを使用して複数のデータベースを使用するクエリをループする

あるデータを複数databases.Inからテーブルを再インデックスしています。このコードでは
DECLARE @DBName varchar (100) 
DECLARE @Sql varchar (100) 
DECLARE @Table varchar (100) 
DECLARE @IndexName varchar (100) 
DECLARE TableCursor CURSOR FOR 
select DBName,[Table],IndexName from IndexOverview_FragLevels 
OPEN TableCursor    
FETCH NEXT FROM TableCursor INTO @DBName, @Table, @IndexName                        
WHILE @@FETCH_STATUS = 0 
BEGIN 
use @DBName; 
DBCC DBREINDEX (@Table ,@IndexName, 90); 
FETCH NEXT FROM TableCursor INTO @DBName,@Table,@IndexName 
END 
close TableCursor 
DEALLOCATE TableCursor 

答えて

0

あなたは、データベースを設定するには、動的SQLのバッチでコマンドを実行する必要がありますコンテキスト。

DECLARE @SQL nvarchar(MAX) = N'USE ' + QUOTENAME(@DBName) + N'; 
    DBCC DBREINDEX (@Table, @IndexName, 90);'; 
EXECUTE sp_executesql 
    @SQL 
    ,N'@Table sysname, @IndexName sysname' 
    ,@Table = @Table 
    ,@IndexName = @IndexName; 

むしろ広く使用され、非常にSQL ServerコミュニティにみなされOla Hallengren's T-SQL maintenance solutionを、使用することを検討して、車輪の再発明より:以下は、パラメータ化クエリの例です。

関連する問題