------------------创建《删除操作》触发器(批处理触发器)----------------
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中记录的删除记录却不正确,记录的确是删除的同一条的数据的信息
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中记录的删除记录却不正确,记录的确是删除的同一条的数据的信息
解决方案 »
- 讨论外键在数据库设计中的地位。
- MS-SQL SERVER2005中将多列数据转到一行上的问题???
- ----这样的SQL怎么写?---
- 请问sql server这句insert into aa(bb)values(N'啊啊')中的N有什么作用
- 如何使用参数,请关注
- 前触发器和后触发器对于使用都来讲或者性能上来讲有什么不同,在线等
- SQL Server经典问题:连接错误
- 怎么进行此种模糊查询--如:在一数据库中查询包含有“张三”的记录,要求不指定字段名,即搜索库中包含有这个字符串的记录。
- 数据库速度问题
- 视图触发器怎么不触发?
- 向表中数据项插入字符串时,字符串中间有空格,弹出错误对话框怎么办?
- SQL 表数据的插入
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
不同信息的删除记录
大致为: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 化验室纱组 , 化验室布组