Transaction de procédure stockée

Je n'ai jamais utilisé une Transaction, Commit et Rollback avant et maintenant j'ai besoin d'en utiliser un. J'ai vérifié autour en ligne, etc pour des exemples pour s'assurer que je suis en fait en utilisant correctement mais je ne sais pas encore si j'ai codé ce correct. J'espère que quelqu'un pourra revoir et de m'informer si cela semble correct.

Fondamentalement, j'ai 2 bases de données pour une application. L'un est une archive - sens des données qui ne va plus être manipulés par les utilisateurs seront déplacés vers la bd. Mais dans le cas où jamais ils en ont besoin, je vais déplacer les données nécessaires à la base de données pour les utiliser. Ma procédure stockée est ci-dessous:

CREATE PROCEDURE [dbo].[spReopenClosed] 
(
@Return_Message VARCHAR(1024) = ''  OUT,        
@IID        uniqueidentifier,
@OpenDate   smalldatetime,
@ReopenedBy uniqueidentifier
)
AS
BEGIN
SET NOCOUNT ON;
/******************************
*  Variable Declarations
*******************************/
DECLARE     @ErrorCode  int  
/******************************
*  Initialize Variables
*******************************/
SELECT @ErrorCode = @@ERROR
IF @ErrorCode = 0
BEGIN TRANSACTION
/****************************************************************************
* Step 1
* Copy the Closed from the Archive
****************************************************************************/
INSERT INTO OPS.dbo.SM_T_In
SELECT          
FROM OPS_ARCHIVE.Archive.SM_T_In    W
WHERE W.GUID = @IID
AND W.OpenDate = @OpenDate
IF @ErrorCode <> 0
BEGIN
-- Rollback the Transaction
ROLLBACK
RAISERROR ('Error in Copying from the archive', 16, 1)
RETURN
END
/****************************************************************************
* Step 2
* copy the notes
****************************************************************************/
INSERT INTO OPS.dbo.SM_T_Notes
SELECT 
FROM OPS_ARCHIVE.Archive.SM_T_Notes W
WHERE W.GUID = @IID
IF @ErrorCode <> 0
BEGIN
-- Rollback the Transaction
ROLLBACK
RAISERROR ('Error in copying the notes', 16, 1)
RETURN
END
/****************************************************************************
* Step 3
* Delete the from the Archive - this will also delete the notes
****************************************************************************/
DELETE
FROM OPS_ARCHIVE.Archive.SM_T_In
WHERE OPS_ARCHIVE.Archive.SM_T_In.GUID = @IID
IF @ErrorCode <> 0
BEGIN
-- Rollback the Transaction
ROLLBACK
RAISERROR ('Error in deleting the items from the Archive', 16, 1)
RETURN
END
COMMIT
BEGIN
SELECT  @ErrorCode  = @@ERROR
IF @ErrorCode = 0
SELECT  @Return_Message = 'All data was moved over'
END
/*************************************
*  Get the Error Message for @@Error
*************************************/
IF @ErrorCode <> 0
BEGIN
SELECT  @Return_Message = [Description]     -- Return the SQL Server error
FROM  master.dbo.SYSMESSAGES
WHERE  error = @ErrorCode
END
/*************************************
*  Return from the Stored Procedure
*************************************/
RETURN @ErrorCode                               -- =0 if success,  <>0 if failure
END

J'ai deux insertions de déplacer les données à partir de 2 tables de la base de données d'Archive. Si ces inserts sont couronnées de succès, alors je vais supprimer les données de l'Archive DB. J'apprécierais vos commentaires sur ce, j'ai besoin de m'assurer que je suis en train de faire cela correctement.

Grâce

source d'informationauteur Taryn