SQL Server:使用复杂的VIEW执行DELETE

时间:2009-12-28 15:49:20

标签: sql-server sql-server-2005

我有一个复杂的VIEW,想对它使用DELETE动词。

可以这样做吗?

DELETE动词是否只影响SELECT语句中使用的FROM表?

我有大约8个连接。这些联合表中的任何一个都会受到影响吗?

我正在使用SQL Server 2005。

4 个答案:

答案 0 :(得分:3)

DELETE只会删除视图中的一个表,但有一些条件。

这里全部包含:Modifying Data Through a View

答案 1 :(得分:2)

从视图中删除是危险的。首先,您必须清楚地删除哪些表(它将不会自动从所有表中删除)。接下来,您可能会或可能不会启用级联删除,因此您甚至可能无法从要删除的表中删除,因为其他表中仍有子记录。最好直接针对所涉及的表执行删除过程,并从子表开始,然后回到父表。

答案 2 :(得分:2)

您可以使用视图中定义的INSTEAD OF DELETE trigger精确控制要删除的内容。在触发器内部,您从基础表中删除。但是用户/应用程序仅暴露给“视图”中的视图删除。

答案 3 :(得分:1)

正常的做法是:

delete from YourTable
where ID in (select ID from ComplexView)

另一种选择是扩展视图:

delete from a
from YourTable as a
join AnohterTable b ON a.bid = b.id
...

使用双重FROM语法,您始终可以确定哪个表包含将要删除的行。有关更多示例,请参阅MSDN page for DELETE