Почему моя хранимая процедура откатывается без меня, объявляя это сделать - PullRequest
0 голосов
/ 18 января 2012

Я пытаюсь импортировать пользователей из пользовательской таблицы пользователей, которая существовала в системе, в таблицы поставщиков членства .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 Ответ

1 голос
/ 18 января 2012

Это происходит из-за того, что неявные транзакции включены И . Вы явно не фиксируете свои изменения.Вы можете либо отключить неявные транзакции, выполнив SET IMPLICIT_TRANSACTIONS OFF , либо поставить COMMIT TRANSACTION после ваших DELETE операторов.

...