create trigger trg_a2b on a for insert as
begin
  insert into b select * from deleted
end

解决方案 »

  1.   

    在A表写触发器
    create trigger trg_a2b on a for insert as 
    begin 
      insert into b select * from deleted 
    end
      

  2.   


    create trigger trg_a2b on a for insert as 
    begin 
      insert into b select * from INSERTED
    end
      

  3.   

    现在有两张表,在插入A表的时候需要向B表插入一个操作记录(此時很容易實現)
    B表中的主码需要手动输入,怎样设A表的插入触发器满足这个要求?
    b中的主碼要手工輸入,那就你查詢出插入的值然後再更新一次啦!
    因為要手工輸入主碼--這點就證明触發器只能估一半工作
      

  4.   


    create trigger tri_insert on tableA
    for insert
    as
    begin
         insert tableB
         select * from insertedend
      

  5.   

    这个问题你不需要考滤太多。一个dml语句引发的触发器过程与dml语句在同一个会话里,只不过是不同的作用域。
    如果b表插入时出错,直接roll back就可以了,dml语句同样被回滚。
    create table t1(a int)
    go
    create table t2(b int)
    go
    create trigger t1_r on t1
    for insert
    as
    begin
    --commit
    insert t2 select a*10000000 from insertedend
    goinsert t1 select 1354
    goselect * from t1
    select * from t2
    /*
    均为空。说明t1,t2都未能插入数据。
    除非显式在出错语句前提交. 去掉commit的注释后,才会看到t1有一行数据。
    instead of,for,after之间有一些差异我就不再多说了,自己体会吧
    */
    godrop table t1,t2
    go
      

  6.   

    我想过建立一个视图,包含A表的所有列和B表的no null列,在视图上创建一个insert触发器,通过触发器分别往两张表插入记录,这样可以保证同时往A、B两表插入记录。
    但是这样也有问题,就是只能通过视图向A表插入记录,要是不通过视图插入,还是会出现数据不一致的问题。
      

  7.   

    create trigger tri_insert on tableA
    for insert
    as
    begin
         insert tableB
         select * from insertedend
      

  8.   


    跟前面的回答一样,不能满足要求啊
    现在把问题具体化一下:
    创建两张表A、B如下create table A
    (
    a int primary key
    )
    go
    create table B
    (
    b int ,
    c nchar(50) not null,
    foreign key(b) references A(a)
    )
    go在向A表插入一个记录的时候必须B表也插入一个相应的操作记录,B表中的"c"为操作理由,需要手动输入,怎样设A表或B表的"INSERT"触发器事务满足这个要求?
      

  9.   


    貌似我说这个不行已经好几次了,但是还是很多人回这个,是不是我的写法错误啊,SQL语句和结果如下:create trigger trg_a2b on A for insert as 
    begin 
      insert into B select * from INSERTED 
    end 结果如下:

    create trigger trg_a2b on A for insert as 
    begin 
      insert into B select * from INSERTED 
    end 
      

  10.   

    失误,结果如下:

    消息 213,级别 16,状态 1,过程 trg_a2b,第 3 行
    插入错误: 列名或所提供值的数目与表定义不匹配。
      

  11.   

    [size=30px]麻烦高手指点[/size]
      

  12.   

    create trigger tri_insert on tableA
    for insert
    as
    begin
         insert tableB
         select * from insertedend
      

  13.   

    create table A
    (
    a int primary key
    )
    go
    create table B
    (
    b int ,
    c nchar(50) not null,
    foreign key(b) references A(a)
    )
    go在向A表插入一个记录的时候必须向B表也插入一个相应的操作记录,B表中的"c"为操作理由,需要手动输入,怎样设A表或B表的"INSERT"触发器或事务满足这个要求?写个存储过程create proc myprocedure
    (@a int,@b int,@c nchar(50))
    as
    begin tran
    insert into A (a) values (@a)
    if @@error>0
    begin
       rollback tran
       return
    end
    insert into B (b,c) values(@b,@c)
    if @@error>0
       rollback tran
    else
       commit tran
    go
      

  14.   


    这样可以保证通过存储过程“myprocedure”向A表和B表同时插入记录
    但是也有问题,就是只能通过存储过程A表B表插入记录,要是直接向A表或者B表插入记录的话是可以插入的,那样就会出现记录不一致的问题。
    这个问题能否解决呢?
      

  15.   

    如果是update a表怎么用觸發器寫b表
      

  16.   

    update的话就再建一个update的触发器,现在问题是insert的问题,update的话也类似啊
      

  17.   

    create trigger tri_insert on tableA
    for insert
    as
    begin
         insert tableB
         select * from insertedend 
    可以
      

  18.   


    create trigger trg_a2b on a for insert as 
    begin 
      insert into b select * from INSERTED
    end
      

  19.   

    [size=35px]第一次回答这个帖子的请先看19-21楼的问题补充,谢谢[/size]
      

  20.   

    create trigger trg_a2b on a for insert as 
    begin 
      insert into b select * from INSERTED
    end
    写触发器
      

  21.   

    [size=45px]第一次回答这个帖子的请先看19-21楼的问题补充,谢谢[/size]
      

  22.   

    难道这个问题不能实现?
    有没有对SQL有经验的啊,麻烦指导一下啊