2011-02-10 3 views
0

サーバー内の複数のデータベースからデータを取得するためのスクリプトを作成しようとしていますが、次のサーバーに引き続き同じスクリプトを実行します。私はすでにあるサーバーとそのすべてのデータベースで動作するスクリプトを作成しました。スクリプトは、すべてのデータベース、すべてのサーバーのテーブルで同じです。サーバー経由で繰り返すSQL Serverスクリプト

私の質問は、現在のサーバーにリンクしているこれらのサーバーからデータを取得し続けるリンクサーバーをスクリプトで認識させるにはどうすればよいですか?誰かが知っている隠されたストアドプロシージャやコマンドがありますか?ここで

は、以下の私のスクリプトです、私は現在、私のサーバの1つにリンクされている5台のサーバーを介して実行するスクリプトを持つようにしたい:

SET NOCOUNT ON 
DECLARE @DBNAME NVARCHAR(MAX) 
DECLARE @DBNAME1 NVARCHAR(MAX) 
DECLARE @varSQL NVARCHAR(MAX) 

DROP TABLE TEMPIMGCOUNTERSERVER3 
CREATE TABLE TEMPIMGCOUNTERSERVER3 
(DBname NVARCHAR(MAX), 
Images INT, 
FileSize INT, 
DBCreation DATETIME) 

DECLARE DBNAME CURSOR FAST_FORWARD FOR 
select name from sys.databases where [NAME] LIKE 'Z%' AND create_date between '2011-02-06' and '2011-02-12' 
ORDER BY [create_date] 

OPEN DBNAME 

FETCH NEXT FROM DBNAME INTO @DBname 
WHILE (@@FETCH_STATUS=0) 
BEGIN 

    Set @varSQL='INSERT INTO TEMPIMGCOUNTERSERVER3 (DBNAME, IMAGES, FileSize, DBCreation) 
    SELECT ''['[email protected]+']'', SUM(PGCOUNT), sum(filesize/1024/1024), sys.databases.CREATE_DATE 
     FROM SYS.DATABASES, ['[email protected]+'].dbo.tbldoc WHERE created between ''2011-02-06'' and ''2011-02-12'' 
     and sys.databases.name='''[email protected]+''' 
     GROUP BY sys.databases.NAME, sys.databases.CREATE_DATE' 
    EXEC SP_EXECUTESQL @varSQL 

    FETCH NEXT FROM DBNAME 
    INTO @DBNAME 
    END 

    CLOSE DBNAME 
    DEALLOCATE DBNAME 

    INSERT TEMPIMGCOUNTERSERVER3 (DBNAME, IMAGES, FILESIZE) 
    SELECT @@SERVERNAME + ' ' +'TOTAL IMAGES AND FILE SIZE', SUM(IMAGES), SUM(FILESIZE) FROM TEMPIMGCOUNTERSERVER3 

    SELECT DBNAME, IMAGES, FILESIZE, convert(VARCHAR(10), 
    DBCREATION, 101) AS DBCREATION FROM TEMPIMGCOUNTERSERVER3 
    GROUP BY DBNAME, IMAGES, FILESIZE, convert(VARCHAR(10), DBCREATION, 101) 
    HAVING SUM(IMAGES) is not null 
    ORDER BY DBCREATION 

答えて

1

あなたはリンクのリストを取得するにはsp_linkedserversを使用することができますサーバー。残念ながら、あなたのスクリプトを見ることなく、このリストを使ってリンクされた各サーバー上でスクリプトを実行するのがどれほど簡単か分かりません。

もちろん、最悪の場合、リストと組み合わせて文字列としてスクリプトを作成し、EXECを使用することができます。

1

リンクされたサーバーを使用することもできますが、同様の機能を提供する別のツールを2つお勧めします。ただし、サーバーの「外部」からのアクセスを推奨します。

これらのツールの1つはSQL Deployで、スクリプトのディレクトリ(または1つのスクリプト)を選択し、そのスクリプト/それらのスクリプトを指定したリストから任意の数のサーバーに対して展開できます。

enter image description here

やや類似したレッド・ゲートのSQL Multi Scriptです - もう一度、あなたはスクリプトの数を選ぶことができ、それらはあなたが定義するサーバーの数に実行している:

たぶん

enter image description here

たものツールは一見価値があるだろうか?

関連する問題