原文:
存储过程,游标和触发器实例[原创]
自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考:
-- 使用游标循环处理,删除重复的记录 declare @UserID int declare @UserName varchar ( 32 ) declare @RealName varchar ( 32 ) declare @UnitFlag int declare @Email2 varchar ( 64 ) declare @Mobile varchar ( 64 ) declare @Start int declare @End int declare @Type varchar ( 16 ) declare @IsSubscribe bit declare curEmailTotalLib cursor for ( select UserID,UserName,RealName,UnitFlag,Email,Mobile,IsSubscribe from Task_IntermediateData) open curEmailTotalLib -- 打开游标 fetch next from curEmailTotalLib into @UserID , @UserName , @RealName , @UnitFlag , @Email2 , @Mobile , @IsSubscribe while @@fetch_status = 0 -- 获取成功 begin -- 在邮件系统总库中不存在此用户ID,不存在此邮箱,并且用户订阅过 if not exists ( select * from Task_EmailTotalLib where UserID = @UserID ) and not exists ( select * from Task_EmailTotalLib where Email = @Email2 ) and @IsSubscribe = 1 begin set @Start = charindex ( ' @ ' , @Email2 , 0 ) set @End = charindex ( ' . ' , @Email2 , @Start ) if @Start != 0 and @End != 0 begin -- 不是垃圾邮件 if @Email2 is not null and ltrim ( rtrim ( @Email2 )) <> '' begin if not exists ( select * from Task_JunkEmail where Email = @Email2 ) begin begin try set @Type = substring ( @Email2 , @Start + 1 , @End - @Start - 1 ) if @Type != ' qq ' and @Type != ' 126 ' and @Type != ' 163 ' and @Type != ' sina ' and @Type != ' sohu ' and @Type != ' gmail ' and @Type != ' hotmail ' and @Type != ' yahoo ' and @Type != ' 139 ' and @Type != ' 263 ' and @Type != ' yeah ' and @Type != ' cnki ' begin set @Type = ' extra ' end insert into Task_EmailTotalLib(UserID, UserName, RealName, Email, Mobile, Priority, MailType, LibType, FpIsSend, CpIsSend, UpIsSend, VpIsSend, WpIsSend, XpIsSend, YpIsSend, ZpIsSend, SendCount, SucCount, FailCount, CreditRate, IsJunkEmail, IsSubscribe, IsUsed, Memo) values ( @UserID , @UserName , @RealName , @Email2 , @Mobile , 2 , @Type , @UnitFlag , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 0 , @IsSubscribe , 0 , '' ) end try begin catch print ' @Email2: ' + @Email2 + ' charindex( '' @ '' , @Email2, 0) ' + charindex ( ' @ ' , @Email2 , 0 ) + ' @Start ' + @Start + ' @End ' + @End + ' @End - @Start - 1: ' + @End - @Start - 1 end catch end end end end fetch next from curEmailTotalLib into @UserID , @UserName , @RealName , @UnitFlag , @Email2 , @Mobile , @IsSubscribe end close curEmailTotalLib -- 关闭游标 deallocate curEmailTotalLib -- 释放游标
触发器实例:插入数据时,触发器获取这条数据ID,自动修改,比程序处理更方便。
Create trigger tg_url_update on [dbo].UrlTotal for insert as
declare @getid int;
declare @url varchar(128);
set @getid=(select id from inserted);
set @url='Test.aspx?id='+cast(@getid as varchar(50))
update UrlTotal set
url=@url
where
id=@getid
谢谢阅读~~