补充一点:在触发器中如何用raiserror来显示错误信息,并且能够让触发器顺利的执行下去不受影响.

解决方案 »

  1.   

    1、电脑也是按顺序第一个或最后一个执行呀!你可以做个实验呀!
    2、那是替代操作触发器如:
    create table 表1(a int,b int)
    go
    create table 表2(a int,b int)
    go
    CREATE TRIGGER 名 on 表1
    INSTEAD OF INSERT
    AS
     INSERT 表2 SELECT * FROM inserted
    go
    ----测试:
    insert 表1 values(1,2)
    select * from 表1
    select * from 表2
    3、
    视图只能用替代操作触发器!
      

  2.   

    大力兄弟我做了一个实验,建立了一个视图
    CREATE VIEW dbo.VIEW1
    AS
    SELECT b, a
    FROM dbo.表1
    并在视图上建立了这样一个触发器
    CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] 
    instead of  INSERT
    AS
    insert 表2 values(33,33)
    但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
    当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.
      

  3.   

    1、多个触发器一次执行,先执行first,在执行none,最后执行last
    2、INSTEAD OF 触发器是代替触发器,也就是说只执行触发器的内容,而不执行触发触发器的语句,这个和after触发器完全不同,after触发器先执行语句,在执行触发器。
    2.1、“****DELETE 语句不指定对现有数据类型的修改。DELETE 语句只指定要删除的行。传递给 DELETE 触发器的 inserted 表总是空的。发送给 DELETE 触发器的 deleted 表包含在发出 UPDATE 语句前就存在的行的映像。如果在视图或表上定义 INSTEAD OF DELETE 触发器,则 deleted 表的格式以为视图定义的选定列表的格式为基础。***”  这句话的意思是DELETE 语句触发的触发器里inserted 表总是空的,没有记录,只有DELETEd表有记录,DELETEd表的表结构和DELETE 语句涉及的表或者视图的结构相同,包括字段名、字段类型和字段次序。3、现在有事,容后回答。
      

  4.   

    楼上的兄弟说的不错,经过我的实验也是如此,但能帮我看看顺便帮我看看视图的问题吗
    1、建立视图会破坏原表的索引?数据量大时会影响查询速度。
    2、表结构更改后必须重建视图如何抓取表结构的变化。
    3、CREATE VIEW dbo.VIEW1
    AS
    SELECT b, a
    FROM dbo.表1
    并在视图上建立了这样一个触发器
    CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] 
    instead of  INSERT
    AS
    insert 表2 values(33,33)
    但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
    当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.谢谢如何愿意的话!
      

  5.   

    先回答上面的:
    3、在视图上定义触发器与定义表触发器有何差异?
      a、视图上只能定义INSTEAD OF 触发器
      b、视图上定义触发器可以很好的解决视图更新问题
      c、一般视图上触发器解决视图更新和删除问题,使得利用视图更方便直观表触发器可以解决一些业务规则问题。
    后面的问题:
    1、建立视图会破坏原表的索引?数据量大时会影响查询速度。
      建立视图会破坏原表的索引???没有这个说法!!!2、表结构更改后必须重建视图如何抓取表结构的变化。
      表结构更改属于非正常操作,讨论这个问题没有很大的实际意义。3、CREATE VIEW dbo.VIEW1
    AS
    SELECT b, a
    FROM dbo.表1
    并在视图上建立了这样一个触发器
    CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] 
    instead of  INSERT
    AS
    insert 表2 values(33,33)
    但是我在视图中插入内容在表1中是增加了内容,但是表2的内容没有改变.
    当我建立的视图为表1和表2的内容时此触发器有效,不知道是什么原因.这个我试过,没有你说的情况,应该是表2的增加了一条33,33的纪录,表1没有变化,这个结果是对的,instead of的提袋就是这个意思。
    对于视图触发器,最好的例子是:
    create view test_view
    as
    select a.id,b.id as bid,a.avalue,b.bvalue
    from a,b
    where a.id=b.aid   --这里a试主表,b是从表,1对多关系,两个表的主键是id。
    go
    CREATE TRIGGER [TR_view1] ON [dbo].[test_VIEW] 
    instead of  update
    ASupdate a
    set avalue=i.avalue
    from inserted i
    where a.id=i.idupdate b
    set bvalue=i.bvalue
    from inserted i
    where b.id=i.bidgo实现视图更新。
      

  6.   

    CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] 
    instead of  update
    ASupdate a
    set a.a=i.a
    from inserted i
    where a.a=i.aupdate b
    set b.a=i.ba
    from inserted i
    where b.a=i.ba**update a
    **set a.a=20
    为什么带**的这段语句没有执行
      

  7.   

    CREATE VIEW dbo.VIEW1
    AS
    SELECT b, a
    FROM dbo.表1
    并在视图上建立了这样一个触发器
    CREATE TRIGGER [TR_view1] ON [dbo].[VIEW1] 
    instead of  INSERT
    AS
    insert 表2 values(33,33)
    goinsert view1 values(1,2)
    select * from table1-----------无数据
    select * from table2-----------有数据
      

  8.   

    楼上的兄弟,为什么打开视图直接操作好像instead of 触发器不起作用,直接将数据插入了table1,如何在查询分析器中操作结果如你所示.再重申******说个具体的应用场合(视图触发器)****
      

  9.   

    回复人: pengdali(大力) ( ) 信誉:376  2003-02-09 20:24:00  得分:0 
     
     
      你自己多做实验就回明白了!