存储过程,游标和触发器实例

原文: 存储过程,游标和触发器实例[原创]

  自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考:

--使用游标循环处理,删除重复的记录

    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

  

       谢谢阅读~~

你可能感兴趣的:(存储过程)