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
  • 相关阅读:
    开源项目
    引入CSS的三种方式
    Android打开数据库读取数据
    每日日报2020.10.16 1905
    课程2 1905
    每日日报2020.10.13 1905
    每日日报2020.10.15 1905
    每日日报2020.10.8 1905
    每日日报2020.10.9 1905
    每日日报2020.10.12 1905
  • 原文地址:https://www.cnblogs.com/ruanbl/p/491904.html
Copyright © 2011-2022 走看看