2012-10-29 41 views
2

我想要做的是驗證一個URL。我只需要能夠從當前在SQL Server 2008中的所有數據庫中選擇那個單一值。所有數據庫都是相同的,只是針對不同用戶的同一個數據庫的多個實例。在多個數據庫上選擇查詢

我期待從每個數據庫中的一個表中拉出一個項目。

每個數據庫都包含一個表SETTINGS,該表中的值爲MapIconURL。我需要每個數據庫中每個表的值。我正在查看大約30個左右的具有此值的數據庫。

所以我找到了「無證」存儲過程sp_MsForEachDb並且正在工作....至某一點。
我使用的代碼是這樣的:

EXEC sp_MsForEachDb 'use ?; SELECT "?" as databasename,SETTINGSKEYID, SECTION, NAME, INIVALUE, DESCRIPTION FROM ?.dbo.SETTINGS WHERE [NAME] = "MapIconURL"'

我注意到,它不是選擇所有的數據庫,但它也選擇了主表,以及其他系統表,並正在考慮這可能是爲什麼它沒有選擇所有表格。有沒有辦法排除系統相關的表?

+0

SELECT MapIconURL FROM db1.dbo.SETINGS UNION ALL SELECT MapIconURL FROM db2.dbo.SETINGS ... –

回答

0

如果數據庫的數量(和姓名)是固定的,那麼你可以簡單地做:

 
SELECT MapIconUrl FROM db1.dbo.SETTINGS 
UNION ALL 
SELECT MapIconUrl FROM db2.dbo.SETTINGS 
... 

但是,如果數據庫的數量或名稱是固定的,那麼你有動態構建查詢。

首先,運行一個查詢,如SELECT name FROM master..sysdatabases以獲取數據庫的名稱。然後,遍歷結果集(在T-SQL中,使用CURSOR)並構建查詢並執行它(在T-SQL中,使用sp_executesql)。