如果表上有视图,如何处理DROP TABLE?

时间:2012-07-16 05:30:34

标签: sql sql-server sql-server-2008

可以使用View命令删除

DROP VIEW。如果表上有视图,是否有处理DROP TABLE的解决方案?

我试过

DROP TABLE ORDER_TBL CASCADE;

现代DBMS还有另一种方法吗?

3 个答案:

答案 0 :(得分:2)

根据MSDN文档:

  

http://msdn.microsoft.com/en-us/library/ms173790.aspx

     

引用已删除表的任何视图或存储过程都必须是   使用DROP VIEW或DROP PROCEDURE显式删除。

换句话说,MSSQL不会自动警告您,也不会为您删除视图。该视图无效。

MSDN继续:

  

要报告表的依赖关系,请使用   sys.dm_sql_referencing_entities。

例如:

答案 1 :(得分:1)

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

enter image description here

enter image description here

对于任何DBA或数据库开发人员来说,这是一个非常必备的工具 - 我是否已经提到它绝对免费用于任何用途?

使用SQL搜索之前删除表格,您可以找出其他对象依赖于该表格。您需要在某些方面处理这些问题 - 删除依赖项或删除这些对象以及表格。

答案 2 :(得分:1)

选项1:

如果您在DROP TABLE之前运行此脚本,它会列出在您的表上有引用的所有对象:

SELECT DISTINCT so.name,so.xtype
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%YOUR TABLE%'

如果您只想查看视图,可以按AND s.xtype='V'过滤上述查询。

选项2:

您可以将WITH SCHEMABINDING添加到视图的定义中,这样就无法删除基于表格。