0

我试图将用户从系统中存在的自定义用户表导入到.net成员资格提供程序表中。为什么我的存储过程回滚我声明它这样做

我构建了一个小应用程序,删除.net成员表中除我自己的帐户以外的所有预先存在的用户。我这样写,这样每次运行应用程序时,它都会清除我添加的任何内容,并重新输入所有用户的数据。这个存储过程在过去一直有效,但自从切换到SQL Server 2005 Enterprise的这个新实例以来,删除事务一直在回滚。

这是存储过程,用于在将用户写回到之前清除所有数据.net成员资格表。

ALTER PROCEDURE [dbo].[usp_ClearAllUsers] 

AS 
begin 

DECLARE @UserID uniqueidentifier 

    set @UserID = (SELECT  UserId 
FROM   dbo.aspnet_Users 
where (UserName = 'gianluca.sirianni')) 


begin 
Delete from dbo.aspnet_Membership WHERE (dbo.aspnet_Membership.UserID != @UserID) 
end 

begin 
Delete from dbo.aspnet_UsersInRoles WHERE (dbo.aspnet_UsersInRoles.UserID != @UserID) 
end 

begin 
Delete from dbo.aspnet_Profile WHERE (dbo.aspnet_Profile.UserID != @UserID) 
end 

begin 
Delete from dbo.aspnet_Users WHERE (dbo.aspnet_Users.UserID != @UserID) 
end 

end 

有人可以提出为什么我的数据可能会回滚吗?我在SQL语句中很流利,但不在服务器本身的事务处理上。

更新:

我将上述过程更改为以下内容。它是否正确?

ALTER PROCEDURE [dbo].[usp_ClearAllUsers] 

AS 
BEGIN 

DECLARE @UserID uniqueidentifier 

    SET @UserID = (SELECT  UserId 
FROM   dbo.aspnet_Users 
WHERE (UserName = 'gianluca.sirianni')) 


BEGIN TRAN 
DELETE FROM dbo.aspnet_Membership WHERE (dbo.aspnet_Membership.UserID != @UserID) 
COMMIT TRAN 

BEGIN TRAN 
DELETE FROM dbo.aspnet_UsersInRoles WHERE (dbo.aspnet_UsersInRoles.UserID != @UserID) 
COMMIT TRAN 

BEGIN TRAN 
DELETE FROM dbo.aspnet_Profile WHERE (dbo.aspnet_Profile.UserID != @UserID) 
COMMIT TRAN 

BEGIN TRAN 
DELETE FROM dbo.aspnet_Users WHERE (dbo.aspnet_Users.UserID != @UserID) 
COMMIT TRAN 

END 

回答

1

这是因为隐含的交易是在转身你没有明确提交更改。 您可以通过执行SET IMPLICIT_TRANSACTIONS OFF 来关闭隐式事务处理,也可以在DELETE语句后面输入COMMIT TRANSACTION

相关问题