2017-11-27 25 views
1

SSMSでは一部のデータベースで同じクエリを実行することは可能ですか? 私は、データベース名を持つ配列のようなものを考えていて、それをサイクリングしていました。多分SQLCMDモードでした。SSMSで同じクエリを同じサーバー内の複数のデータベースで実行する

いくつかの擬似コード:

:setvar arr ["db1", "db2", "db3"] 
foreach $db in $arr 
    :setvar database $db 
    use $(database) 
    go 
    select * from table 

おかげ

+0

あなたは[こちら](http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx) – HoneyBadger

+0

は、これらのデータベースです参照して、(文書化されていない) 'sp_MSForeachdb'を使用することができます同じインスタンスに?次に、sp foreachデータベースを使用することができます。 http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx。注:この男は文書化されていません –

+0

これはうまくいきますが、インスタンスの一部のデータベースにのみ適用する必要があります。 –

答えて

2
-- To Achive your Desire OutpUt You Have to Use Dynamic Query 
-- you can Achieve this in TSQL 
-- TO Know The Database ID Run Below Query 
/* 
SELECT * FROM Sys.databases WHERE database_id >4 
*/ 



USE MASTER 
    GO 
    BEGIN TRAN 

    DECLARE @strt INT,@End INT,@Database NVARCHAR(255) 

    SELECT * INTO #T FROM Sys.databases WHERE database_id IN (4,5,6)-- Here you Have to Defined the Database ID 
    ORDER BY 1 

    SELECT ROW_NUMBER()OVER (ORDER BY database_Id)Db_Id,* INTO #TT FROM #T 
    SET @strt=1 
    SELECT @End=Max(Db_ID)FROM #tt 

    WHILE @strt<[email protected] 
     BEGIN 
      DECLARE @string NVARCHAR(MAX) 
      SELECT @Database=NAME FROM #TT WHERE [email protected] 

      Set @string=' Select * from '[email protected]+'..Table_Name' 

       SET @[email protected]+1 
       PRINT @string 
       EXEC(@string) 
     END 

    ROLLBACK TRAN 
+0

に変更されます。これは、インスタンス内のすべてのdbsを選択します。私は私によって定義されたいくつかのdbを必要とします。 –

+0

@ʞᴉɯ私は編集しなければならなかった –

0

は、ここで各sys.columnsテーブルを打つために私のデータベース(ステージングと倉庫)の2を使用した例です。必要なデータベースの名前と必要なスキーマ/テーブル名を持つ ".sys.columns"の名前でINフィルタを変更してください。

DECLARE @query NVARCHAR(MAX) = '' 
; 

SELECT @query += CONCAT('SELECT * FROM ',[name],'.sys.columns;') 
FROM sys.databases 
WHERE [name] IN ('Staging','Warehouse') 
; 

EXEC sp_executesql @query; 
関連する問題