簡體   English   中英

為什么我的存儲過程回滾而沒有聲明要這樣做

[英]Why is my stored procedure rolling back with out me declaring it to do so

我正在嘗試從系統中存在的自定義用戶表中導入用戶。

我構建了一個小型應用程序,刪除了.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

發生這種情況是因為隱式事務已打開並且您沒有顯式提交更改。 您可以通過執行SET IMPLICIT_TRANSACTIONS OFF來設置隱式事務,也可以在DELETE語句后放置COMMIT TRANSACTION

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM