aspnet_Users_DeleteUser

aspnet_Users_DeleteUser
None.gif ALTER     PROCEDURE   [ dbo ] .aspnet_Users_DeleteUser   -- 删除用户信息
None.gif
     @ApplicationName    NVARCHAR ( 256 ),
None.gif    
@UserName           NVARCHAR ( 256 ),
None.gif    
@TablesToDeleteFrom   INT ,
None.gif    
@NumTablesDeletedFrom   INT  OUTPUT
None.gif
AS
ExpandedBlockStart.gifContractedBlock.gif
/**/ /*因为用户的信息分开保存在多张表中,所以在删除某用户信息的 
InBlock.gif  时候同时要在多张表中删除该用户的信息.所以下面才进行多个表的判断和操作.
InBlock.gif  其中@TablesToDeleteFrom会接受由aspnet_Profile_DeleteProfiles传来的
InBlock.gif  4,这个数用于对以下的于运算.这个存储过程还可能接受其他存储过程传过来的参数,不
ExpandedBlockEnd.gif   过目前我就看到这个. 
*/

None.gif
BEGIN
None.gif    
DECLARE   @UserId                 UNIQUEIDENTIFIER
None.gif    
SELECT    @UserId                 =   NULL
None.gif    
SELECT    @NumTablesDeletedFrom   =   0
None.gif
None.gif    
DECLARE   @TranStarted     BIT
None.gif    
SET   @TranStarted   =   0
None.gif
None.gif    
IF @@TRANCOUNT   =   0  )   -- 如果当前活动事务为0,开始事务并设置事务参数为1
None.gif
     BEGIN
None.gif        
BEGIN   TRANSACTION
None.gif        
SET   @TranStarted   =   1
None.gif    
END
None.gif    
ELSE
None.gif    
SET   @TranStarted   =   0
None.gif
None.gif    
DECLARE   @ErrorCode     INT    -- -声明错误代码
None.gif
     DECLARE   @RowCount      INT     -- -声明行数
None.gif

None.gif    
SET   @ErrorCode   =   0
None.gif    
SET   @RowCount    =   0
None.gif
None.gif    
SELECT    @UserId   =  u.UserId
None.gif    
FROM     dbo.aspnet_Users u, dbo.aspnet_Applications a
None.gif    
WHERE    u.LoweredUserName        =   LOWER ( @UserName )
None.gif        
AND  u.ApplicationId          =  a.ApplicationId
None.gif        
AND   LOWER ( @ApplicationName =  a.LoweredApplicationName
ExpandedBlockStart.gifContractedBlock.gif        
/**/ /*从aspnet_Users和aspnet_Applications表中查询输入的@UserName的UserId并
ExpandedBlockEnd.gif              付给声明的@UserId
*/

None.gif
None.gif
None.gif    
IF  ( @UserId   IS   NULL )   -- 如果此用户不存在,跳转到回滚
None.gif
     BEGIN
None.gif        
GOTO  Cleanup
None.gif    
END
None.gif
None.gif    
--  Delete from Membership table if (@TablesToDeleteFrom & 1) is set
None.gif
     IF  (( @TablesToDeleteFrom   &   1 <>   0   AND
None.gif        (
EXISTS  ( SELECT  name  FROM  sysobjects  WHERE  (name  =  N ' aspnet_Membership ' AND  (type  =   ' U ' ))))
ExpandedBlockStart.gifContractedBlock.gif        
/**/ /* &(按位 AND)在两个整型值之间执行按位逻辑与运算。
ExpandedBlockEnd.gif             后面是判断是否存在aspnet_Membership表,直接运行后面这条语句的结果是aspnet_Membership
*/

ExpandedBlockStart.gifContractedBlock.gif        
/**/ /*即输入参数@TablesToDeleteFrom不为0且存在aspnet_Membership表的话,执行以下*/
None.gif
None.gif    
BEGIN
None.gif        
DELETE   FROM  dbo.aspnet_Membership  WHERE   @UserId   =  UserId
None.gif         
-- -删除此用户的所有在aspnet_Membership表中的数据
None.gif
         SELECT   @ErrorCode   =   @@ERROR ,
None.gif               
@RowCount   =   @@ROWCOUNT
None.gif
None.gif        
IF @ErrorCode   <>   0  )  -- 如果有错误则跳转到回滚
None.gif
             GOTO  Cleanup
None.gif
None.gif        
IF  ( @RowCount   <>   0 -- 如果受影响行数不为0,即操作影响了数据行,表示操作成功
None.gif
             SELECT    @NumTablesDeletedFrom   =   @NumTablesDeletedFrom   +   1   -- 那个参数的值递增1
None.gif
     END
None.gif
None.gif    
--  Delete from aspnet_UsersInRoles table if (@TablesToDeleteFrom & 2) is set
None.gif
     IF  (( @TablesToDeleteFrom   &   2 <>   0    AND
None.gif        (
EXISTS  ( SELECT  name  FROM  sysobjects  WHERE  (name  =  N ' aspnet_UsersInRoles ' AND  (type  =   ' U ' ))) )
ExpandedBlockStart.gifContractedBlock.gif       
/**/ /*如果@TablesToDeleteFrom不为0且存在aspnet_UsersInRoles,执行以下*/
None.gif
None.gif    
BEGIN
None.gif        
DELETE   FROM  dbo.aspnet_UsersInRoles  WHERE   @UserId   =  UserId
ExpandedBlockStart.gifContractedBlock.gif         
/**/ /*从aspnet_UsersInRoles表删除此用户的所有数据信息*/   
None.gif        
None.gif
None.gif        
SELECT   @ErrorCode   =   @@ERROR ,
None.gif                
@RowCount   =   @@ROWCOUNT
None.gif
None.gif        
IF @ErrorCode   <>   0  )  -- 如果有错则回滚
None.gif
             GOTO  Cleanup
None.gif
None.gif        
IF  ( @RowCount   <>   0 -- 如果操作成功为@NumTablesDeletedFrom递增1
None.gif
             SELECT    @NumTablesDeletedFrom   =   @NumTablesDeletedFrom   +   1
None.gif    
END
None.gif
None.gif    
--  Delete from aspnet_Profile table if (@TablesToDeleteFrom & 4) is set
None.gif
     IF  (( @TablesToDeleteFrom   &   4 <>   0    AND
None.gif        (
EXISTS  ( SELECT  name  FROM  sysobjects  WHERE  (name  =  N ' aspnet_Profile ' AND  (type  =   ' U ' ))) )
ExpandedBlockStart.gifContractedBlock.gif          
/**/ /*如果@TablesToDeleteFrom不为0且存在aspnet_Profile,执行以下*/
None.gif
None.gif    
BEGIN
None.gif        
DELETE   FROM  dbo.aspnet_Profile  WHERE   @UserId   =  UserId
ExpandedBlockStart.gifContractedBlock.gif          
/**/ /*从aspnet_Profile删除此用户的所有数据*/
None.gif        
SELECT   @ErrorCode   =   @@ERROR ,
None.gif                
@RowCount   =   @@ROWCOUNT
None.gif
None.gif        
IF @ErrorCode   <>   0  )  -- 有错误则回滚
None.gif
             GOTO  Cleanup
None.gif
None.gif        
IF  ( @RowCount   <>   0 )   -- 成功则为@NumTablesDeletedFrom递增1
None.gif
             SELECT    @NumTablesDeletedFrom   =   @NumTablesDeletedFrom   +   1
None.gif    
END
None.gif
None.gif    
--  Delete from aspnet_PersonalizationPerUser table if (@TablesToDeleteFrom & 8) is set
None.gif
     IF  (( @TablesToDeleteFrom   &   8 <>   0    AND
None.gif        (
EXISTS  ( SELECT  name  FROM  sysobjects  WHERE  (name  =  N ' aspnet_PersonalizationPerUser ' AND  (type  =   ' U ' ))) )
ExpandedBlockStart.gifContractedBlock.gif           
/**/ /*如果@TablesToDeleteFrom不为0且存在aspnet_PersonalizationPerUser,执行以下*/
None.gif
None.gif    
BEGIN
None.gif        
DELETE   FROM  dbo.aspnet_PersonalizationPerUser  WHERE   @UserId   =  UserId
ExpandedBlockStart.gifContractedBlock.gif            
/**/ /*从aspnet_PersonalizationPerUser表删除此用户的所有数据信息*/   
None.gif        
SELECT   @ErrorCode   =   @@ERROR ,
None.gif                
@RowCount   =   @@ROWCOUNT
None.gif
None.gif        
IF @ErrorCode   <>   0  )  -- 有错误则跳转到回滚段
None.gif
             GOTO  Cleanup
None.gif
None.gif        
IF  ( @RowCount   <>   0 )   -- 成功则为@NumTablesDeletedFrom的值递增1
None.gif
             SELECT    @NumTablesDeletedFrom   =   @NumTablesDeletedFrom   +   1
None.gif    
END
None.gif
None.gif    
--  Delete from aspnet_Users table if (@TablesToDeleteFrom & 1,2,4 & 8) are all set
None.gif
     IF  (( @TablesToDeleteFrom   &   1 <>   0   AND
None.gif        (
@TablesToDeleteFrom   &   2 <>   0   AND
None.gif        (
@TablesToDeleteFrom   &   4 <>   0   AND
None.gif        (
@TablesToDeleteFrom   &   8 <>   0   AND
None.gif        (
EXISTS  ( SELECT  UserId  FROM  dbo.aspnet_Users  WHERE   @UserId   =  UserId)))
ExpandedBlockStart.gifContractedBlock.gif       
/**/ /*如果全部按位于都不为0且aspnet_Users表中是否存在此用户
ExpandedBlockEnd.gif           其实1,2,4,8和1按位于都不为0
*/

None.gif
None.gif    
BEGIN
None.gif        
DELETE   FROM  dbo.aspnet_Users  WHERE   @UserId   =  UserId
ExpandedBlockStart.gifContractedBlock.gif          
/**/ /*删除aspnet_Users中此用户的数据*/
None.gif
None.gif        
SELECT   @ErrorCode   =   @@ERROR ,
None.gif                
@RowCount   =   @@ROWCOUNT
None.gif
None.gif        
IF @ErrorCode   <>   0  )  -- 有错误则跳转到回滚段
None.gif
             GOTO  Cleanup
None.gif
None.gif        
IF  ( @RowCount   <>   0 )    -- 成功则为@NumTablesDeletedFrom值递增1
None.gif
             SELECT    @NumTablesDeletedFrom   =   @NumTablesDeletedFrom   +   1
None.gif    
END
None.gif
None.gif    
IF @TranStarted   =   1  )  -- 如果事务正常开始到这里
None.gif
     BEGIN
None.gif        
SET   @TranStarted   =   0   -- 重新设置为0
None.gif
         COMMIT   TRANSACTION     -- 结束事务
None.gif
     END
None.gif
None.gif    
RETURN   0
None.gif
None.gifCleanup:  
-- -这就是传说中的跳转部分
None.gif
     SET   @NumTablesDeletedFrom   =   0
None.gif
None.gif    
IF @TranStarted   =   1  )
None.gif    
BEGIN
None.gif        
SET   @TranStarted   =   0
None.gif        
ROLLBACK   TRANSACTION
None.gif    
END
None.gif
None.gif    
RETURN   @ErrorCode
None.gif
None.gif
END

转载于:https://www.cnblogs.com/ruanbl/archive/2006/09/01/491909.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值