rs.*_*rs. 6 t-sql sql-server sql-server-2005 views
有没有办法可以找出使用自定义查询或存储过程的视图使用的基表?
Mil*_*dic 11
您可以使用sys.dm_sql_referenced_entities函数查找指定视图引用的对象:
SELECT DISTINCT
referenced_schema_name ,
referenced_entity_name
FROM sys.dm_sql_referenced_entities ('Sales.vSalesPersonSalesByFiscalYears', 'OBJECT');
Run Code Online (Sandbox Code Playgroud)

此外,还有sys.sql_expression_dependencies系统视图,您可以在其中指定表名和引用对象的类型:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc
FROM sys.sql_expression_dependencies se
INNER JOIN sys.objects o
ON se.referencing_id = o.[object_id]
WHERE referenced_entity_name = 'Person' AND o.type_desc = 'View'
Run Code Online (Sandbox Code Playgroud)

为了避免"手动"工作,您还可以使用ApexSQL Clean,这是一个可以找到所有内部和外部依赖项的SQL Server工具.在结果窗格中选择一个对象,并查看依赖于所选对象的所有对象,以及所选对象所依赖的对象:

您还可以过滤对象并可视化依赖项:

免责声明:我作为支持工程师为ApexSQL工作
希望这可以帮助
您可以使用sql_dependencies视图:
select OBJECT_NAME(referenced_major_id) as DependantObject
from sys.sql_dependencies
where object_id = object_id('YourViewName')
Run Code Online (Sandbox Code Playgroud)
以递归方式检索依赖项(例如,如果从视图中选择,则会找到其他视图引用的表):
with deps (child, parent) as (
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
where d.object_id = object_id('YourViewName')
union all
select d.object_id, d.referenced_major_id
from sys.sql_dependencies d
inner join deps on deps.parent = d.object_id
)
select OBJECT_NAME(parent)
from deps
Run Code Online (Sandbox Code Playgroud)
这种方法不是万无一失的.例如,如果使用sp_rename重命名对象,则不会更新其依赖项.
| 归档时间: |
|
| 查看次数: |
11479 次 |
| 最近记录: |