确定哪些对象引用SQL Server中的表

Tav*_*usi 30 sql-server-2008 table-rename

我使用SQL Server 2008,我有一个拥有超过1500列和大约500个存储过程的数据库....

我想重命名一个有几个关系的表,并在许多存储过程和视图和...中引用.

如何在数据库中获取与此表有关系的所有项?

谢谢.

Mit*_*eat 43

使用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
Run Code Online (Sandbox Code Playgroud)

'mySchemaName.myTableName'例如,你的schema.table 在哪里'dbo.MyTable'

  • @Tavousi - 请参阅http://msdn.microsoft.com/en-us/library/bb630351.aspx正如您所看到的,您想要使用''OBJECT'作为第二个参数.SQL Server中的默认架构是`dbo`,因此可能是您的架构. (2认同)

mar*_*c_s 13

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

在此输入图像描述

在此输入图像描述

对于任何DBA或数据库开发人员来说,它都是必备工具 - 我是否已经提到它可以完全免费用于任何类型的使用?


Pri*_*Ray 11

这是我发现的另一种解决方案.您不必安装任何工具.只需运行查询分析器.

Use [Database]
Go

SELECT
referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
referencing_object_name = o.name,
referencing_object_type_desc = o.type_desc,
referenced_schema_name,
referenced_object_name = referenced_entity_name,
referenced_object_type_desc = o1.type_desc,
referenced_server_name, referenced_database_name
--,sed.* -- Uncomment for all the columns
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 = 'SP_Pay_GetData'
order by referencing_object_name
Run Code Online (Sandbox Code Playgroud)

  • 在到期时给予信用 https://blog.sqlauthority.com/2012/12/02/sql-server-find-referenced-or-referencing-object-in-sql-server-using-sys-sql_expression_dependencies/ (4认同)