【问题标题】:Why is my stored procedure rolling back with out me declaring it to do so为什么我的存储过程在没有我声明的情况下回滚
【发布时间】:2012-01-18 18:30:44
【问题描述】:

我正在尝试将系统中存在的自定义用户表中的用户导入 .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

【问题讨论】:

    标签: sql sql-server-2005 stored-procedures asp.net-membership


    【解决方案1】:

    发生这种情况是因为启用了隐式事务并且您没有明确提交您的更改。 您可以通过执行 SET IMPLICIT_TRANSACTIONS OFF 来关闭隐式事务,或者将 COMMIT TRANSACTION 放在 DELETE 语句之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多