------------------创建《删除操作》触发器(批处理触发器)----------------
create trigger HISTORY_TORRENT_LOG_3 on HISTORY_TORRENT
for delete as
declare @ADCD_NAME varchar(5)
declare @HAPTIME  datetime
declare @DESCRIP   varchar(11)
declare @ECOLOSS   float(3)
declare @CONTENT   varchar(30)
------------------------------
 
-----------------------------
declare tb cursor local for select ADCD,HAPTIME,DESCRIP,ECOLOSS from deleted 
open tb 
fetch next from tb into @ADCD_NAME,@HAPTIME,@DESCRIP,@ECOLOSS while @@fetch_status=0 ----@@fetch_status是什么???
begin 
    select @ADCD_NAME = ADCD  from deleted
    select @ADCD_NAME=ADCD ,@HAPTIME=HAPTIME ,@DESCRIP=DESCRIP,@ECOLOSS=ECOLOSS from deleted
    insert into CHANGE_LOG(TABLE_ID,CHANGE_PRIMARY_KEY,CHANGE_TYPE,CHANGE_CONTENT)
        values ('HISTORY_TORRENT',cast(getdate() as varchar),'delete',@ADCD_NAME+'-'+cast(@HAPTIME as varchar(10))+'-'+@DESCRIP+'-'+cast(@ECOLOSS as varchar(5)))
    --select ADCD,HAPTIME,DESCRIP,ECOLOSS from deleted 
    fetch next from tb into @ADCD_NAME,@HAPTIME,@DESCRIP,@ECOLOSS 
end
close tb 
deallocate tb
go上面是我创建的删除操作的批处理触发器
将要删除的是这个表HISTORY_TORRENT中的数据,数据如下
0001    2010-12-5 10:18:51 暴雪 1
0002    2010-12-5 10:20:09 暴雪 2
0003    2010-12-5 10:20:20 暴雪 3
0004    2010-12-5 10:20:27 暴雪 4
0005    2010-12-5 10:20:34 暴雪 5
0006    2010-12-5 10:20:42 暴雪 6
删除的SQL语句如下delete from HISTORY_TORRENT  
where HAPTIME in (select HAPTIME from HISTORY_TORRENT where DESCRIP='暴雪')删除后删除记录要记录在表CHANGE_LOG中
执行删除操作后
表CHANGE_LOG中记录的数据如下HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010 10:20AM-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT     12  5 2010 10:42AM delete        0006 -12  5 2010-暴雪-6
HISTORY_TORRENT表中的数据是删除了,但是表CHANGE_LOG中记录的删除记录却不正确,记录的确是删除的同一条的数据的信息  

解决方案 »

  1.   

    我想让表CHANGE_LOG中记录下
    0001 2010-12-5 10:18:51 暴雪 1
    0002 2010-12-5 10:20:09 暴雪 2
    0003 2010-12-5 10:20:20 暴雪 3
    0004 2010-12-5 10:20:27 暴雪 4
    0005 2010-12-5 10:20:34 暴雪 5
    0006 2010-12-5 10:20:42 暴雪 6
    不同信息的删除记录
      

  2.   

    没有必要做批处理,只需要一个触发器机器.
    大致为:create trigger my_trig on tb1 for delete
    as
    begin
      insert into tb2 select ... from deleted
    end相关资料请参考:
    --触发器的操作1create table 化验室纱组(本厂编号 int,客户 int,色号 int,纱支 int)
    create table 化验室布组(本厂编号 int,客户 int,色号 int,布类 int)
    go
    create trigger my_trig on 化验室纱组 for insert ,update ,delete
    as
    if not exists(select 1 from inserted)
       delete 化验室布组 from deleted t where 化验室布组.本厂编号 = t.本厂编号 
    else if not exists(select 1 from deleted) 
       insert into 化验室布组(本厂编号 ,客户 ,色号) select 本厂编号 ,客户 ,色号 from inserted
    else
       update 化验室布组 set 客户 = t.客户 , 色号 = t.色号 from inserted t where 化验室布组.本厂编号 = t.本厂编号
    go--1、insert 对化验室纱组插入数据,然后查看化验室布组表的数据
    insert into 化验室纱组 values(1 , 2 , 3 , 4)
    insert into 化验室纱组 values(5 , 6 , 7 , 8)
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    1           2           3           NULL
    5           6           7           NULL(所影响的行数为 2 行)
    */--2、update , 更改化验室纱组表中本厂编号=1的色号=6
    update 化验室纱组 set 色号 = 6 where 本厂编号 = 1
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    1           2           6           NULL
    5           6           7           NULL(所影响的行数为 2 行)
    */--3、delete 化验室纱组表中本厂编号=1的那条数据
    delete from 化验室纱组 where 本厂编号 = 1
    go
    select * from 化验室布组
    /*
    本厂编号        客户          色号          布类          
    ----------- ----------- ----------- ----------- 
    5           6           7           NULL(所影响的行数为 1 行)
    */drop table 化验室纱组 , 化验室布组