你用的sqlserver2000,使用INSTEAD OF 替换触发器
把你对试图的更新都写到这个触发器里

解决方案 »

  1.   

    可以按下列方式通过视图修改数据: 使用具有支持 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 子句定义的子查询范围内使用聚合函数,前提条件是聚合函数生成的派生值没有修改过。
      

  2.   

    把更新操作写在带instead of的trigger里,
    CREATE TRIGGER myView_AB ON view_AB
    INSTEAD OF INSERT,DELETE,UPDATE
    AS
    BEGIN
    ...
    END
      

  3.   

    视图的删改添加是有限制的!建议对视图建立INSTEAD OF 触发器
      

  4.   

    通过视图进行的数据更改会更改基表,但视图中的数据更改不能影响一个以上的基表。也就是说,你可以更改从两个或多个表派生的视图,但每个更新或修改仅能影响一个表。
    而你要对视图的记录delete,很显然影响到了两个表。
      

  5.   

    是这样啊!感谢大伙帮忙。但还有一个小问题,照楼上说的,当一个视图显示关联两个表的数据时,我们不能用视图来进行更新操作。一旦进行视图分割,又难以在客户端显示完整的数据(因客户习惯通过视图浏览从多张基张中提取出来的数据)。要么就是在客户端编程以获取各分割后的视图的部分记录集并对其操作,但这样又使对记录集操作难度加大的。另外,如果类似的情况者用触发器,太多的触发器交织在一起,一出错要查起来又好像很难的样子,也不知是我的数据库设计得不好,还是对触发器不熟悉的原因。总之觉得SERVER/CLIENT结构体系的系统时,想要做一个模块结构好的系统好难。也不知大伙在开发SERVER/CLIENT结构体系的系统时,有什么体会没有?不妨说来听听:)
      

  6.   

    你这个问题应该是在程序里碰到吧??
    其实比较好办,如果是2000,就同楼上 dlkfth(工资低呀) 
    如果是2000,你可以把触发器写到子表中,在程序中先删掉子表,再通过子表的触发器自动删掉主表(当然,仅用于两表,一主一从),从表面看上去就像你从视图上删除一样.
    至于 firetoucher(蹈火者) 兄的话我不太赞同,触发器用多了的确不好,因为难以控制,至于什么存储过程也要在特殊情况下才用就实在是错了.用存储过程可以优化你许多查询或者工作性能,是数据库系统优化设计的一个方面和表现!
      

  7.   

    hh_fwhy:能不能举例说说你指的子表,主表是什么?我不大懂。还有就是,其实firetoucher和你的看法是一致的:)