关于数据库:在 SQL Server 中,如何使用系统表/视图识别特定表的*所有*依赖项?

关于数据库:在 SQL Server 中,如何使用系统表/视图识别特定表的*所有*依赖项?

In SQL Server, how do I identify *all* dependencies for a specific table using system tables/views?

我正在编写一个 DDL 脚本来删除一些表,但需要首先确定这些表的所有依赖项。这些依赖项包括外键约束、存储过程、视图等。最好在删除依赖表之前以编程方式使用系统表/视图删除这些依赖项。


从头开始编写非常混乱。您是否考虑过第三方工具,例如
Red-Gate SQL 依赖跟踪器?


sp_depends 不可靠 请参阅:Do you depend on sp_depends(没有双关语)


你能参考一下sysreferences吗?

1
2
3
4
5
6
7
select 'if exists (select name from sysobjects where name = '''+c.name+''') '
+' alter table ' + t.name +' drop constraint '+ c.name
 from sysreferences sbr, sysobjects c, sysobjects t, sysobjects r
 where c.id = constrid
  and t.id = tableid
  and reftabid = r.id
  and r.name = 'my_table'

这将产生大量的条件 drop constraint 调用。应该工作。


你总是可以搜索 syscomments 表……不过这可能需要一段时间……


您可以使用 sp_depends 存储过程来执行此操作:

USE AdventureWorks
GO
EXEC sp_depends @objname = N'Sales.Customer' ;

http://msdn.microsoft.com/en-us/library/ms189487(SQL.90).aspx


推荐阅读