可以按下列方式通过视图修改数据: 使用具有支持 INSERT、UPDATE 和 DELETE 语句的逻辑的 INSTEAD OF 触发器。 使用修改一个或多个成员表的可更新分区视图。 如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新:如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新: 视图在视图定义的 FROM 子句中包含至少一个表;视图不能只基于一个表达式。 在选择列表中没有使用聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP)或 GROUP BY、UNION、DISTINCT 或 TOP 子句。但是,可以在 FROM 子句定义的子查询范围内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。
把更新操作写在带instead of的trigger里, CREATE TRIGGER myView_AB ON view_AB INSTEAD OF INSERT,DELETE,UPDATE AS BEGIN ... END
使用修改一个或多个成员表的可更新分区视图。
如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新:如果视图不使用 INSTEAD OF 触发器或者不是可更新分区视图,则只要符合下列条件,仍可更新: 视图在视图定义的 FROM 子句中包含至少一个表;视图不能只基于一个表达式。
在选择列表中没有使用聚合函数(AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP)或 GROUP BY、UNION、DISTINCT 或 TOP 子句。但是,可以在 FROM 子句定义的子查询范围内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。
CREATE TRIGGER myView_AB ON view_AB
INSTEAD OF INSERT,DELETE,UPDATE
AS
BEGIN
...
END
而你要对视图的记录delete,很显然影响到了两个表。
其实比较好办,如果是2000,就同楼上 dlkfth(工资低呀)
如果是2000,你可以把触发器写到子表中,在程序中先删掉子表,再通过子表的触发器自动删掉主表(当然,仅用于两表,一主一从),从表面看上去就像你从视图上删除一样.
至于 firetoucher(蹈火者) 兄的话我不太赞同,触发器用多了的确不好,因为难以控制,至于什么存储过程也要在特殊情况下才用就实在是错了.用存储过程可以优化你许多查询或者工作性能,是数据库系统优化设计的一个方面和表现!