有没有办法知道任何视图是否正在引用某个特定的表。我使用下面的代码,它只给出了SP和函数名称:
select * from sys.objects p inner join sys.sql_modules m
on p.object_id = m.object_id
where m.definition like '%abc%'
请帮助!!!
答案 0 :(得分:9)
select *
from INFORMATION_SCHEMA.VIEWS
where VIEW_DEFINITION like '%abc%'
答案 1 :(得分:8)
首先,您的查询在结果集中提供了视图(我在AdentureWorks2012上试了一下 - > Production.Product表):
如果您使用的是SQL Server 2008或更高版本,则可以使用sys.sql_expression_dependencies目录视图。例如:
SELECT
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc
FROM sys.sql_expression_dependencies sed
INNER JOIN sys.objects o
ON sed.referencing_id = o.[object_id]
LEFT OUTER JOIN sys.objects o1
ON sed.referenced_id = o1.[object_id]
WHERE referenced_entity_name = 'YourTable'
它可以让您对用户定义的实体的每个按名称依赖关系进行了很好的了解
对于列级依赖关系,您可以使用sys.dm_sql_referenced_entities函数
希望这有帮助
答案 2 :(得分:1)
如果您需要按名称查找数据库对象(例如表格,列,触发器) - 请查看名为SQL Search的免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。
对于任何DBA或数据库开发人员来说,这是一个非常必备的工具 - 我是否已经提到它绝对免费用于任何用途?
如果这不符合您的账单 - 您还可以查看SQL Server中的sysdepends
目录视图 - 它列出了哪些对象依赖于什么(请参阅MSDN文档中的详细信息)。
要找出哪些对象依赖于给定的表,您可以使用以下内容:
SELECT
id,
OBJECT_NAME(ID)
FROM sys.sysdepends
WHERE depid = OBJECT_ID('YourTable')
这应该会根据该表(或视图或您正在检查的任何内容)为您提供所有对象的列表