其他数据库中的 SQL Server 依赖关系
Posted
技术标签:
【中文标题】其他数据库中的 SQL Server 依赖关系【英文标题】:SQL Server Dependencies in Other Databases 【发布时间】:2021-04-15 01:15:18 【问题描述】:我正在尝试做的事情: 我正在尝试获取视图、存储过程等及其依赖项的列表。
例如,我有一个名为[sp_1]
的存储过程,要生成[sp_1]
,我需要table_1
、view_1
和view_2.
我正在使用下面的查询,它似乎在大多数情况下都有效;但是,如果我的[referenceing_object_name]
(又名[sp_1]
)使用另一个数据库中的对象,它们不会出现在我的查询中。
如果我有
[db_1].[dbo].[sp_1]
它由以下组成
[db_1].[dbo].[table_1]
[db_1].[dbo].[view_1]
[db_2].[dbo].[view_2]
它只会在我的结果中显示[db_1].[dbo].[table_1]
和[db_1].[dbo].[view_1]
。
关于如何获取出现在其他数据库中的对象有什么建议吗?
select top 100
[sed_objects_depend_on].[referencing_id]
,[s].[name] as [schema_name]
,[o_referencing].[name] as [referencing_object_name]
,[o_referencing].[type_desc] as [referencing_type_desc]
,[sed_objects_depend_on].[Referenced_Database_Name]
,[sed_objects_depend_on].[referenced_schema_name]
,[sed_objects_depend_on].[Referenced_Entity_Name]
,[sed_objects_depend_on].[Referenced_ID]
,[o_referenced].[name] as [referenced_object_name]
,[o_referenced].[type_desc] as [referenced_type_desc]
from
[sys].[sql_expression_dependencies] as [sed_objects_depend_on]
------------------------
inner join
[sys].[objects] as o_referencing
on
o_referencing.[object_id] = [sed_objects_depend_on].[referencing_id]
------------------------
inner join
[sys].[objects] as o_referenced
on
o_referenced.[object_id] = [sed_objects_depend_on].[referenced_id]
------------------------
inner join
[sys].[schemas] as s
on
o_referencing.[schema_id] = s.[schema_id]
------------------------
where
[sed_objects_depend_on].[Referencing_ID] IN
(
'657437416'
-----
,'1823514471'
,'1467672822'
,'233468306'
)
order by
--[sed_objects_depend_on].[Referenced_Entity_Name]
[o_referencing].[name]
,[sed_objects_depend_on].[Referenced_Entity_Name];
【问题讨论】:
这也许就是您要找的东西? ***.com/questions/720339/… 不,我正在尝试查看依赖项,而不是跨服务器查询。 试试这个SELECT OBJECT_NAME (referencing_id),referenced_database_name, referenced_schema_name, referenced_entity_name FROM sys.sql_expression_dependencies WHERE referenced_database_name IS NOT NULL;
,看看你会得到什么。
好像成功了,我得做相应的调整。
当我在 2 个不同的数据库中查询相同的 object_id 时,我有 2 个具有相同 object_id 的对象。这使得加入reference_id 很难得到object_name。有什么建议吗?
【参考方案1】:
试试这个
SELECT Object_name (referencing_id),
referenced_database_name,
referenced_schema_name,
referenced_entity_name
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL;
看看你会得到什么。
【讨论】:
以上是关于其他数据库中的 SQL Server 依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 中的 sp_depends,都有哪些可能的依赖关系?