zoukankan      html  css  js  c++  java
  • aspnet_Roles_DeleteRole

    ALTER  PROCEDURE dbo.aspnet_Roles_DeleteRole
        
    @ApplicationName            NVARCHAR(256),
        
    @RoleName                   NVARCHAR(256),
        
    @DeleteOnlyIfRoleIsEmpty    BIT  --只有当角色为空时删除(即无用户使用该角色,下面有用)
    AS
    BEGIN
        
    DECLARE @ApplicationId UNIQUEIDENTIFIER
        
    SELECT  @ApplicationId = NULL
        
    SELECT  @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName= LoweredApplicationName
        
    IF (@ApplicationId IS NULL)
            
    RETURN(1)
            
    /*查询@ApplicationId(他好象都是通过这个和另外一个调用存储过程的方法来返回@ApplicationId的
                 两种方法在我看来好象是一样的样子,不过存储过程显然验证的东西多点.)
    */


        
    DECLARE @ErrorCode     INT
        
    SET @ErrorCode = 0

        
    DECLARE @TranStarted   BIT
        
    SET @TranStarted = 0

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

        
    DECLARE @RoleId   UNIQUEIDENTIFIER
        
    SELECT  @RoleId = NULL
        
    SELECT  @RoleId = RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER(@RoleNameAND ApplicationId = @ApplicationId
          
    --声明角色ID并查询此角色的角色ID
        IF (@RoleId IS NULL---如果不存在
        BEGIN
            
    SELECT @ErrorCode = 1   --返回错误
            GOTO Cleanup
        
    END
        
    IF (@DeleteOnlyIfRoleIsEmpty <> 0--如果@DeleteOnlyIfRoleIsEmpty不为0
        BEGIN
            
    IF (EXISTS (SELECT RoleId FROM dbo.aspnet_UsersInRoles  WHERE @RoleId = RoleId))
               
    /*如果存在有用户在使用此角色,就是这意思吧.*/
            
    BEGIN
                
    SELECT @ErrorCode = 2  --返回错误代码2
                GOTO Cleanup
            
    END
        
    END


        
    DELETE FROM dbo.aspnet_UsersInRoles  WHERE @RoleId = RoleId 
        
    /*从aspnet_UsersInRoles表中删除此角色的所有记录*/

        
    IF@@ERROR <> 0 )  --如果有错误,返回错误代码并跳转到回滚 
        BEGIN
            
    SET @ErrorCode = -1
            
    GOTO Cleanup
        
    END

        
    DELETE FROM dbo.aspnet_Roles WHERE @RoleId = RoleId  AND ApplicationId = @ApplicationId
             
    /*从aspnet_Roles中删除此角色*/        

        
    IF@@ERROR <> 0 )  ---如果有错误则回滚
        BEGIN
            
    SET @ErrorCode = -1
            
    GOTO Cleanup
        
    END

        
    IF@TranStarted = 1 )
        
    BEGIN
            
    SET @TranStarted = 0 
            
    COMMIT TRANSACTION
        
    END

        
    RETURN(0)
         
    /*因为角色在两个表中存在,所以删除某角色的时候必须删除两个表中的信息*/    
     
    Cleanup:

        
    IF@TranStarted = 1 )
        
    BEGIN
            
    SET @TranStarted = 0
            
    ROLLBACK TRANSACTION
        
    END

        
    RETURN @ErrorCode
    END
  • 相关阅读:
    Linux内核RPC请求过程
    二分图
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 合并石子
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 摩尔斯电码
    Java实现 蓝桥杯 算法提高 文本加密
    Java实现 蓝桥杯 算法提高 文本加密
    Java蓝桥杯 算法提高 九宫格
    Java蓝桥杯 算法提高 九宫格
  • 原文地址:https://www.cnblogs.com/ruanbl/p/491904.html
Copyright © 2011-2022 走看看