【发布时间】: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