SQL 其他数据库中的服务器依赖项
SQL Server Dependencies in Other Databases
我想做什么:
我正在尝试获取视图、存储过程等及其依赖项的列表。
例如,我有一个名为 [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];
试试这个
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;
看看你得到了什么。
我想做什么: 我正在尝试获取视图、存储过程等及其依赖项的列表。
例如,我有一个名为 [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];
试试这个
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;
看看你得到了什么。