在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'
这将产生很多条件的"放置约束"调用。应该管用。