2016-09-20 35 views
0

我想查看實例中所有數據庫中的所有同義詞列表。在大多數數據庫中,只有1個同義詞,但每個實例中都有數百個數據庫。理想情況下,我想結果是這個樣子:整個實例中的所有數據庫和相應的同義詞列表

1列:數據庫名

2列:同義詞名稱

3列:基礎對象名稱(或其他任何東西,將顯示的確切文本同義詞)

該查詢所做的更多的不是我希望它做的事情,但它僅適用於單個數據庫。

select db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 

我試着改變上面的查詢來顯示所有數據庫的結果,並且我結束了下面的查詢。雖然它不會導致執行失敗,但它也不會產生結果。它使用正確的列名打印數百個空表。

DECLARE @command varchar(1000) 
SELECT @command = 'select db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 
EXEC sp_MSforeachdb @command 

我會很感激,如果你能幫助我找到一種方式來獲得的情況下,每個數據庫的所有同義詞的一個乾淨的名單。

回答

2

你非常接近。您需要添加一個use,否則所有的報表內運行master

DECLARE @command varchar(1000) 
SELECT @command = 'use [?] select ''[?]'', db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 
EXEC sp_MSforeachdb @command 

我已經添加了數據庫名稱作爲另一列,以便您可以看到數據庫的名字,我敢肯定,你會可能希望進一步調整此查詢,以便它實際上針對每個單獨的數據庫運行。

+0

它就像一個魅力。謝謝! – QWE

相關問題