在SQL Server中,如何使用系统表/视图识别特定表的"所有"依赖项?

时间:2020-03-05 18:50:24  来源:igfitidea点击:

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

解决方案

回答

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

使用AdventureWorks 去 EXEC sp_depends @objname = N'Sales.Customer';

http://msdn.microsoft.com/zh-CN/library/ms189487(SQL.90).aspx

回答

sp_depends不可靠,请参见:我们是否依赖sp_depends(无双关语)

回答

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

回答

我们可以始终在syscomments表中进行搜索。...虽然可能需要一些时间...

回答

你能参考sysreferences吗?

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'

这将产生很多条件的"放置约束"调用。应该管用。