2012-01-06 9 views
0

これをTSQLのループで実行できるかどうかはわかりません。ビューを削除して再作成するデータベースのリストをループする

私はループしたいデータベースのリストを持っており、各データベースをドロップし、必要に応じてビューを再作成します。

私は既にビューを削除して再作成するスクリプトを持っています。しかし、現在私のスクリプトの一番上には、たくさんのuseステートメントがあります。私はスクリプトのコメントを外して再実行するだけです。しかし、私はそれをはるかに高速になるように自動化したいと思います。過去にもデータベース名の文字列をループして、それを使ってuse文を実行していたのと同じことをやっています。これは、ビューをgoステートメントで区切らなければならないため、ビューを作成するとき以外は機能します。ここで私のコードのコードスニペットは、ビューを使って作業をするための助けとなるだろうデータベースを解析する素晴らしいです。

DECLARE @DBs AS VARCHAR(MAX); 
DECLARE @OneDB AS VARCHAR(255); 
DECLARE @CmdToExec AS VARCHAR(MAX); 

SET @DBs = 'db1,db2,db3,db4,db5,db6,db7,db8,db9,db10,db11,db12,db13,db14,db15,db16' 

DECLARE DB_Cursor CURSOR FOR 
    SELECT SUBSTRING(',' + @DBs + ',', n + 1, 
     CHARINDEX(',', ',' + @DBs + ',', n + 1) - n - 1) AS "dbInfo" 
    FROM CommunityPAL.dbo.Numbers 
    WHERE SUBSTRING(',' + @DBs + ',', n, 1) = ',' 
     AND n < LEN(',' + @DBs + ','); 
OPEN DB_Cursor; 
FETCH NEXT FROM DB_Cursor INTO @OneDB; 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @CmdToExec = 'USE ' + @OneDB; 
    EXEC @CmdToExec; 

    --statements to execute 

    FETCH NEXT FROM DB_Cursor INTO @OneDB; 
END 
CLOSE DB_Cursor 
DEALLOCATE DB_Cursor 
+0

"には、ループしたいデータベースのリストがあり、データベースごとにドロップし、必要に応じてビューを再作成します。 - なぜ? –

+0

各ビューに新しいフィールドを追加する必要があります。異なるクライアントデータベースのビューを使用するWebアプリケーションがあります。 – user1134537

答えて

0

私はあなたがT-SQL内で排他的にしたいことはできないと確信しています。 CREATE VIEW(およびALTER VIEW)は、3つの部分からなる命名規則(database.schema.object)を使用しません。これはバッチ内の唯一のステートメントでなければならないため、動的SQL呼び出し(EXECまたはsp_executeSQL)内のUSEコマンドと組み合わせることはできません。そのUSEの効果は、そのバッチの持続時間埋め込み式)。

しかし、「外部」SQLサーバーと同様の作業を行い、特定の「タイプ」(すべてのクライアント/顧客に1つのデータベース)のすべてのデータベースの特定のオブジェクトを更新しています。それは複雑になる。簡単な概要:

  • が一度データベースごとにSQLCMDを実行するデータベースのリストの上にお好み
  • ループのスクリプト(またはプログラミング)言語を使用し、
+0

子スコープ用にも存続します。 'EXEC( '使用tempdb; EXEC(' ''を表示すると、選択したAS X SELECT 1 AS X '')') –

+0

Ooh、ネストされた動的SQL。あなたの後ろに私を、サタン! (おそらく動作しますが...) –

0
あなた [RE]CREATE VIEWスクリプト実行

手順を確認して、すべてのデータベースをループしてください:

Take advantage of undocumented SQL Server iteration procedures

+0

「CREATE VIEWはバッチ内の唯一のステートメントになることができます」という問題はまだあります。これは関連性の高いものです。 *データベース(つまり、[list of DBs]のような 'IF ''? ''のような構文です。 –

関連する問題