整个实例中所有数据库和相应同义词的列表

QWE*_*QWE 3 sql-server synonym

我正在尝试查看实例中所有数据库中所有同义词的列表。在大多数数据库中,只有1个同义词,但是每个实例中都有数百个数据库。理想情况下,我希望结果看起来像这样:

第1列:DatabaseName

第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;'
Run Code Online (Sandbox Code Playgroud)

我试图更改上述查询以显示所有数据库的结果,但最终得到以下查询。尽管执行执行不会失败,但也不会产生结果。它使用正确的列名打印数百个空表。

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
Run Code Online (Sandbox Code Playgroud)

如果您能帮助我找到一种方法来获取实例上每个数据库上所有同义词的完整列表,将不胜感激。

Dam*_*ver 5

你很亲密 您需要添加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
Run Code Online (Sandbox Code Playgroud)

我将数据库名称添加到另一列中,以便您可以看到数据库名称,并且我敢肯定,由于它实际上已经针对每个单独的数据库运行,因此您可能希望进一步修改该查询。