我正在尝试查看实例中所有数据库中所有同义词的列表。在大多数数据库中,只有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;'
我尝试更改上面的查询以显示所有数据库的结果,我最终得到了以下查询。虽然它不会因执行而失败,但它也不会产生结果。它使用正确的列名打印数百个空表。
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
如果您能帮我找到一种方法来获取实例上每个数据库的所有同义词的清单,我将非常感激。
答案 0 :(得分:3)
你非常接近。您需要添加echo
,否则所有语句都会在use
中运行:
master
我已将数据库名称添加为另一列,以便您可以查看数据库名称,并且我确定您可能希望进一步调整此查询,因为它实际上是针对每个单独的数据库运行。