0

View可以使用DROP VIEW命令删除。DROP TABLE如果桌子上有视图,是否有处理解决方案?

我试过了

DROP TABLE ORDER_TBL CASCADE;

现代DBMS中还有其他方法吗?

4

3 回答 3

3

根据 MSDN 文档:

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

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

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

MSDN 继续:

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

例如:

于 2012-07-16T05:36:05.877 回答
1

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

在此处输入图像描述

在此处输入图像描述

对于任何 DBA 或数据库开发人员来说,它都是一个很棒的必备工具——我是否已经提到它完全免费用于任何用途?

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

于 2012-07-16T05:43:29.360 回答
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添加到视图的定义中,这样您就不能删除基于表的表。

于 2012-07-16T05:58:09.987 回答