ALTERPROCEDURE dbo.aspnet_UsersInRoles_RemoveUsersFromRoles @ApplicationNameNVARCHAR(256), @UserNamesNVARCHAR(4000), @RoleNamesNVARCHAR(4000) AS BEGIN DECLARE@ApplicationIdUNIQUEIDENTIFIER SELECT@ApplicationId=NULL SELECT@ApplicationId= ApplicationId FROM aspnet_Applications WHERELOWER(@ApplicationName) = LoweredApplicationName IF (@ApplicationIdISNULL) RETURN(2) /**//*返回@ApplicationId,不存在则返回2*/ DECLARE@TranStartedBIT DECLARE@ErrorCodeINT SET@ErrorCode=0 SET@TranStarted=0 IF( @@TRANCOUNT=0 ) --如果当前活动事务为0,开始事务并设置事务参数为1 BEGIN BEGINTRANSACTION SET@TranStarted=1 END ELSE SET@TranStarted=0 DECLARE@RoleIdUNIQUEIDENTIFIER DECLARE@UserIdUNIQUEIDENTIFIER DECLARE@UserNameNVARCHAR(256) DECLARE@RoleNameNVARCHAR(256) DECLARE@CurrentPosUINT DECLARE@NextPosUINT DECLARE@CurrentPosRINT DECLARE@NextPosRINT SELECT@CurrentPosU=1 ----------------------------------------------------------------------------------- ---------------又是那个------------------------------------- WHILE(@CurrentPosU<=LEN(@UserNames)) BEGIN SELECT@NextPosU=CHARINDEX(N',', @UserNames, @CurrentPosU) IF (@NextPosU=0OR@NextPosUISNULL) SELECT@NextPosU=LEN(@UserNames)+1 SELECT@UserName=SUBSTRING(@UserNames, @CurrentPosU, @NextPosU-@CurrentPosU) SELECT@CurrentPosU=@NextPosU+1 SELECT@CurrentPosR=1 WHILE(@CurrentPosR<=LEN(@RoleNames)) BEGIN SELECT@NextPosR=CHARINDEX(N',', @RoleNames, @CurrentPosR) IF (@NextPosR=0OR@NextPosRISNULL) SELECT@NextPosR=LEN(@RoleNames)+1 SELECT@RoleName=SUBSTRING(@RoleNames, @CurrentPosR, @NextPosR-@CurrentPosR) SELECT@CurrentPosR=@NextPosR+1 ------------------------------------对用户名和角色名的操作---------------- SELECT@RoleId=NULL SELECT@RoleId= RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName =LOWER(@RoleName) AND ApplicationId =@ApplicationId /**//*查询角色ID*/ IF (@RoleIdISNULL) --如果不存在则跳转回滚 BEGIN SELECT N'', @RoleName SET@ErrorCode=2 GOTO Cleanup END SELECT@UserId=NULL SELECT@UserId= UserId FROM dbo.aspnet_Users WHERE LoweredUserName =LOWER(@UserName) AND ApplicationId =@ApplicationId /**//*查询用户ID*/ IF (@UserIdISNULL) ---如果不存在则跳转回滚 BEGIN SELECT@UserName, N'' SET@ErrorCode=1 GOTO Cleanup END IF (NOT(EXISTS(SELECT*FROM dbo.aspnet_UsersInRoles WHERE@UserId= UserId AND@RoleId= RoleId))) /**//*如果此用户不存在于此角色中,跳转回滚*/ BEGIN SELECT@UserName, @RoleName SET@ErrorCode=3 GOTO Cleanup END DELETEFROM dbo.aspnet_UsersInRoles WHERE (UserId =@UserIdAND RoleId =@RoleId) /**//*如果存在于此角色中,则删除此记录*/ END END IF( @TranStarted=1 ) BEGIN SET@TranStarted=0 COMMITTRANSACTION--结束事务 END RETURN(0) Cleanup: IF( @TranStarted=1 ) BEGIN SET@TranStarted=0 ROLLBACKTRANSACTION END RETURN@ErrorCode END