[英]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.