Insert触发器

 触发器使用的inserted临时表和deleted临时表

1不论后触发或替代触发,每个触发器被激活时,系统都自动为它们创建两个临时表:inserted和deleted表。
2两个表的结构与激活触发器的原数据表结构相同。
3用INSERT语句插入记录激活触发器时,系统在原表插入记录的同时,也自动把记录插入到inserted临时表。
4用SELECT语句删除记录激活触发器时,系统在原表删除记录的同时,会把删除的记录添加到deleted临时表。
5用UPDATE语句修改数据激活触发器时,系统先在原表删除原有记录,删除的记录被添加到deleted临时表,然后再插入新记录,并同时插入到inserted临时表。
6用户可以用SELECT语句查询这两个临时表,但不允许进行修改。
7触发器一旦执行完成,这两个表将被自动删除

     如果被操作的数据是多值的,可用IN判断是否被包含在其中:
被操作数据  IN (SELECT 被操作字段 FROM 临时表)
     如果被操作的数据是单值的,可用以下语句获得:
SELECT  @变量=被操作字段  FROM  临时表
删除触发器

 算每一行合差的触发器

ContractedBlock.gif ExpandedBlockStart.gif Code
alter trigger trigger_data_getsum
on ttools_data
after 
insert,update,delete
as
DECLARE FIDcurcursor CURSOR 
for
select d_fold_id from inserted group by d_fold_id

open FIDcurcursor
declare @d_fold_id int
FETCH NEXT FROM FIDcurcursor into @d_fold_id
WHILE @@FETCH_STATUS = 0
begin
    
DECLARE MYcursor CURSOR 
    
FOR 

    
select d_id, d_value,d_type,d_sum from ttools_data where d_fold_id= @d_fold_id order by d_date,d_id
    
open MYcursor
    
declare @d_id int@d_value float@d_type int@d_sum float@sum float
    
set @sum = 0
    
FETCH NEXT FROM MYcursor into  @d_id,@d_value,@d_type,@d_sum
    
WHILE @@FETCH_STATUS = 0
    
begin
            
if @d_type = 1
                    
set @sum = @sum + @d_value
            
else if @d_type = 2
                
set @sum = @sum - @d_value
                
update ttools_data set d_sum = @sum where d_fold_id= @d_fold_id and  d_id = @d_id
                   
FETCH NEXT FROM MYcursor into @d_id,@d_value,@d_type,@d_sum
    
end
    
CLOSE MYcursor
    
DEALLOCATE MYcursor

end


CLOSE FIDcurcursor
DEALLOCATE FIDcurcursor


INSERT INTO ttools_data([d_fold_id],[d_user_id],[d_value],[d_type],
[d_catalog_id],[d_date],[d_add_time],[d_info],d_sum)VALUES(4,1,3.4,2,8,'2009-1-1',getdate(),'sss',0)

 

ContractedBlock.gif ExpandedBlockStart.gif Code
--A表主表 B表 级联的表
create trigger dropempid
on myemp
after 
delete
as
delete from B where [id] in (select empid from deleted)


--in (select empid from deleted) deleted表中的内容就是 A表删除的内容 

delete from myemp where empid = 34

 

insert,update触发器

 

ContractedBlock.gif ExpandedBlockStart.gif Code
create trigger a
on myemp
after 
insert,update
as
declare @fname nvarchar(50),@lname nvarchar(50),@aname nvarchar(50),@empid int

select @empid=empid, @fname=fname,@lname=lname from inserted

set @aname = @fname + @lname

update myemp set aname = @aname  where empid=@empid
--把值先从inserted中取出来


update myemp set fname='1111111',lname='2222222222' where empid =30

insert into myemp (fname,lname) values ('wwwwwwwwww','hhhhhhhhhhhh')

 

 

ContractedBlock.gif ExpandedBlockStart.gif Code
alter trigger t_trigger
on t
after 
insert
as
declare @rc int
set @rc = @@rowcount
if @rc = 0 return

declare @tname nvarchar(50),@tid int
if @rc = 1
begin
    
select @tid = tid,@tname = tname from inserted
    
print 'id= '+ cast(@tid as nvarchar(10)) + ','+'name=' + @tname
end
else
begin
    
select * into #t from inserted
    
create unique clustered index idx_id on #t(tid)
    
    
select @tid = tid,@tname = tname from (select top 1 tid,tname from #t order by tid) as d  --赋值
    while @@rowcount >0
    
    
begin
        
print 'id= '+ cast(@tid as nvarchar(10)) + ','+'name=' + @tname
        
        
select @tid = tid,@tname = tname from (select top 1 tid,tname from #t where tid>@tid order by tid) as d
    
end
end


delete from t

insert into t select 1,'a'

union all
select 2,'b'

union all
select 3,'c'

union all
select 4,'d'

 

ContractedBlock.gif ExpandedBlockStart.gif Code
CREATE TRIGGER AddMessage
ON Topic
FOR INSERT
AS
INSERT INTO Message (
    
[ModuleID],
    
[TopicID],
    
[MessageUserID],
    
[MessageCreateTime],
    
[MessageIP]
)
select  [ModuleID],
    
[TopicID],
    
[CreatedByUser],
    
[CreatedDate],
    
[CreatedIP]
from inserted



INSERT INTO Message (
    
[ModuleID],
    
[TopicID],
    
[MessageUserID],
    
[MessageCreateTime],
    
[MessageIP]
values (1,1,1,getdate(),1)

转载于:https://www.cnblogs.com/reommmm/articles/1167929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值