• aspnet_Profile_DeleteProfiles


    ALTER  PROCEDURE dbo.aspnet_Profile_DeleteProfiles
        
    @ApplicationName        NVARCHAR(256),
        
    @UserNames              NVARCHAR(4000)
    AS
    BEGIN
        
    DECLARE @UserName     NVARCHAR(256)
        
    DECLARE @CurrentPos   INT
        
    DECLARE @NextPos      INT
        
    DECLARE @NumDeleted   INT
        
    DECLARE @DeletedUser  INT
        
    DECLARE @TranStarted  BIT
        
    DECLARE @ErrorCode    INT

        
    SET @ErrorCode = 0
        
    SET @CurrentPos = 1
        
    SET @NumDeleted = 0
        
    SET @TranStarted = 0
        
    -----------声明变量并为变量附初值-----------------

        
    IF@@TRANCOUNT = 0 )  
        
    BEGIN
            
    BEGIN TRANSACTION
            
    SET @TranStarted = 1
        
    END
        
    ELSE
            
    SET @TranStarted = 0
       
    ---------------如果当前活动事务为0,开始事务并设置事务参数为1---------------------


        
    WHILE (@CurrentPos <= LEN(@UserNames)) --如果@CurrentPos不大于输入参数的长度
              /*LEN返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。*/
        
    BEGIN
            
    SELECT @NextPos = CHARINDEX(N','@UserNames,  @CurrentPos)
              
    /*CHARINDEX  返回字符串中指定表达式的起始位置
               返回@UserNames中从@CurrentPos开始   N','  的起始位置
    */

            
    IF (@NextPos = 0 OR @NextPos IS NULL)
                
    SELECT @NextPos = LEN(@UserNames+ 1

            
    SELECT @UserName = SUBSTRING(@UserNames@CurrentPos@NextPos - @CurrentPos)
            
    SELECT @CurrentPos = @NextPos+1
              
    /*SUBSTRING 返回字符、binary、text 或 image 表达式的一部分。
                上面即返回@UserNames中开始位置为@CurrentPos,长度为@NextPos - @CurrentPos的部分
    */



    ----------------------上面这部分有点不明白为什么要这样-----------
            IF (LEN(@UserName> 0)
            
    BEGIN
                
    SELECT @DeletedUser = 0 
             
    -----------------调用存储过程aspnet_Users_DeleteUser(最好看下这个存储过程先),输出参数为@DeletedUser----------
                EXEC dbo.aspnet_Users_DeleteUser @ApplicationName@UserName4@DeletedUser OUTPUT
                
    IF@@ERROR <> 0 ) --如果存储过程执行有错误,则跳转到回滚
                BEGIN
                    
    SET @ErrorCode = -1
                    
    GOTO Cleanup
                
    END
                
    IF (@DeletedUser <> 0--如果存储过程的输出参数不为0,即成功了,则@NumDeleted递增1
                    SELECT @NumDeleted = @NumDeleted + 1
            
    END
        
    END
        
    SELECT @NumDeleted ---查询 NumDeleted
        IF (@TranStarted = 1)  ---事务运行到此
        BEGIN
            
    SET @TranStarted = 0
            
    COMMIT TRANSACTION   ---结束事务
        END
        
    SET @TranStarted = 0

        
    RETURN 0

    Cleanup:
        
    IF (@TranStarted = 1 )
        
    BEGIN
            
    SET @TranStarted = 0
            
    ROLLBACK TRANSACTION
        
    END
        
    RETURN @ErrorCode
    END
  • 相关阅读:
    java_oop_方法2
    POJ 3276 Face The Right Way(反转)
    POJ 3276 Face The Right Way(反转)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 2566 Bound Found(尺取法,前缀和)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3320 Jessica's Reading Problem(尺取法)
    POJ 3061 Subsequence(尺取法)
    POJ 3061 Subsequence(尺取法)
    HDU 1222 Wolf and Rabbit(欧几里得)
  • 原文地址:https://www.cnblogs.com/ruanbl/p/491062.html
Copyright © 2020-2023  润新知