2016-06-20 11 views
1

私はサーバ上のすべてのデータベースに存在する特定のフィールドに存在する値を確認するためにSQLクエリを適合させようとしています。複数のデータベースで同じSQLクエリを実行する

個別のデータベースが100あり、それぞれのデータベースの特定のレコードを確認したいと思います。

答えは、おそらく以下のようなコマンドを使用することですが、私はそれを適応させるのが難しいです。

EXECUTE sp_MSForEachDB 
    'USE ?; SELECT DB_NAME()AS DBName, 
    COUNT(1)AS [Count] FROM CUSTOMERS' 

私は以下のリンクで大きな成功を収めました。

https://stackoverflow.com/a/18462734/3461845

私はこのクエリを実行できるようにする必要があります。

SELECT [SettingName],[SettingValue] FROM [HostSettings] Where [SettingName] = 'SMTPServer' 

も返される各行のデータベースの名前を引き戻します。

DBName | SettingName | SettingValue 

Database1 | SMTPServer | smtp.gmail.com 

Database2 | SMTPServer | smtp.gmail.com 

Database3 | SMTPServer | smtp.yahoo.com 

何か助けていただければ幸いです。

ありがとうございます!

答えて

2
DECLARE @T TABLE 
([DbName] SYSNAME, 
[SettingName] VARCHAR(255), 
[SettingValue] VARCHAR(255)); 

INSERT INTO 
@T 
EXEC sp_MSForEachDB 
'SELECT 
    ''?'', 
    [SettingName], 
    [SettingValue] 
FROM 
    [?]..[HostSettings] 
WHERE 
    [SettingName] = ''SMTPServer'''; 

SELECT * FROM @T; 
+0

返信ありがとうございます。 次のエラーが発生することがありますか? ' - '付近の構文が正しくありません。 私はgoogleを持っていましたが、それは空白と関係するかもしれませんが、私ができることを取り除こうとしましたが、まだ動作していません。 – Birksy89

+0

これは私のテーブル名にハイフンが付いているからだと思います...今これを試してみてください。 – Birksy89

0

SSMSで登録サーバーを使用できます。すべてのデータベースで同じクエリを実行する。 SSMSで

  1. が続い登録済みサーバー

  2. タイプローカルサーバーグループにその後、新しいサーバーグループをクリックしますビューにアクセスしてくださいGの名前競売

  3. 次に、作成したグループ名、右

  4. をクリックして、(例えば)新サーバー登録

  5. とサーバー名ローカルホストローカルホストに続いて右クリックし、 新しいクエリ。すべてのデータベースで同じクエリが実行されます。

+0

私はこれを試してみました、それは私のシナリオでは動作しません。 – Birksy89

0

以下を無視してください。これを試して。

DECLARE @sql VARCHAR(8000) 
DECLARE @string VARCHAR(100)= 'SMTPServer' 
SET @sql = 'EXECUTE sp_MSForEachDB 
    ''USE ?; SELECT DB_NAME()AS DBName, 
     SettingName, 
     SettingValue 
    FROM HostSettings 
    WHERE SettingName =''' + '''' + @string +'''''' + '''' 

EXEC (@sql) 
関連する問題