我有一个复杂的VIEW,想对它使用DELETE动词。
可以这样做吗?
DELETE动词是否只影响SELECT语句中使用的FROM表?
我有大约8个连接。这些联合表中的任何一个都会受到影响吗?
我正在使用SQL Server 2005。
答案 0 :(得分:3)
DELETE只会删除视图中的一个表,但有一些条件。
答案 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。