• [SQL SERVER系列]存储过程,游标和触发器实例[原创]


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

    --使用游标循环处理,删除重复的记录
        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

      

           谢谢阅读~~

  • 相关阅读:
    tushare包使用案例
    Matplotlib模块:绘图和可视化
    pandas使用
    django 表操作
    元数据Meta
    django关系类型字段
    django项目模型字段
    django项目mysite 2
    django安装使用xadmin
    GCC版本中没有GLIBCXX_3.4.15错误
  • 原文地址:https://www.cnblogs.com/suixinpeng/p/3438150.html
Copyright © 2020-2023  润新知