确定在SQL Server中哪些对象引用了一个表

39

我需要重命名一个表,该表有许多列和处理针对该表的存储过程。在这种情况下,如何获取与表有关系的数据库中的所有项目?

3个回答

62

使用sys.dm_sql_referencing_entities

SELECT 
    referencing_schema_name, referencing_entity_name, referencing_id, 
    referencing_class_desc, is_caller_dependent
FROM 
    sys.dm_sql_referencing_entities ('mySchemaName.myTableName', 'OBJECT');
GO

其中'mySchemaName.myTableName'是您的模式和表名,例如'dbo.MyTable'


谢谢。但是"mySchemaName"和"OBJECT"是什么? - Tavousi
3
请参考http://msdn.microsoft.com/en-us/library/bb630351.aspx,你会发现需要将`'OBJECT'`作为第二个参数。在SQL Server中,默认模式为dbo,因此这很可能是你的模式。 - Tobsey
1
如果您意外地返回0行,请注意在SQL Server 2008-2012中,sys.dm_sql_referencing_entites需要对所引用的对象具有CONTROL权限才能工作。尝试以拥有提升权限的数据库用户身份运行查询。 - Jon Schneider
1
这似乎无法用于查找在不同数据库中引用的对象,而该存储过程正在执行的数据库与其不同。 - Zach Smith
我在一个古老的 SQL 2008 (10.0) 环境中尝试了这个操作,搜索一个表,结果返回了两个视图,但没有返回该表上定义的四个触发器。它应该返回这些触发器吗? - user2871239

18

如果您需要按名称查找数据库对象(例如表,列,触发器),请查看名为SQL Search免费Red-Gate工具 - 它可以搜索整个数据库以查找任何类型的字符串。

enter image description here

enter image description here

这是任何DBA或数据库开发人员必备的绝佳工具 - 我是否已经提到它绝对免费用于任何类型的使用?

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接