OVH Cloud OVH Cloud

pbm de transaction sql

3 réponses
Avatar
AD
Bonjour,
je suis entrain de tester les transactions dans mon application
et je gére cela du coté du server ( SQL SERVER 2000).
J'ai une procedure stockée qui va me permettre d'inserer des tuples dans une
table avec gestion des transactions

Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'test1')


INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'test2')
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'test3')

IF @@ERROR <> 0
BEGIN
RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
SELECT 0
END
ELSE
BEGIN
SELECT 1
END

COMMIT TRANSACTION
GO



ma table DEGRE_URGENCE contient actuellement deux enregistrements qui ont l'
ID 1 et 2. Donc ma procédure stockée ne devrait pas inserer l'enregistrement
avec l'ID 1 et 3 et ne devrait pas inserer l'enregistrement avec l'ID 6
puisqu'il ya une erreur de conflit de clé avec les enregistrements d'ID 1 et
2. Mais l'enregistrement avec l'ID 6 est insérer tout de meme et je ne le
souhaite po vu qu'il ya eu des problemes auparavant. Normalement la
transaction ne s'est pas effectuer avec succés, donc aucun n'enregistrement
ne devrait etre insérer. Comment remedier a cela merci d'avance !

3 réponses

Avatar
Med Bouchenafa
Voir SET XACT_ABORT dans l'Aide En Ligne
--
Bien cordialement
Med Bouchenafa


"AD" wrote in message
news:
Bonjour,
je suis entrain de tester les transactions dans mon application
et je gére cela du coté du server ( SQL SERVER 2000).
J'ai une procedure stockée qui va me permettre d'inserer des tuples dans
une
table avec gestion des transactions

Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'test1')


INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'test2')
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'test3')

IF @@ERROR <> 0
BEGIN
RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
SELECT 0
END
ELSE
BEGIN
SELECT 1
END

COMMIT TRANSACTION
GO



ma table DEGRE_URGENCE contient actuellement deux enregistrements qui ont
l'
ID 1 et 2. Donc ma procédure stockée ne devrait pas inserer
l'enregistrement
avec l'ID 1 et 3 et ne devrait pas inserer l'enregistrement avec l'ID 6
puisqu'il ya une erreur de conflit de clé avec les enregistrements d'ID 1
et
2. Mais l'enregistrement avec l'ID 6 est insérer tout de meme et je ne le
souhaite po vu qu'il ya eu des problemes auparavant. Normalement la
transaction ne s'est pas effectuer avec succés, donc aucun
n'enregistrement
ne devrait etre insérer. Comment remedier a cela merci d'avance !


Avatar
Pascal Soveaux
"AD" wrote in message
news:
Bonjour,
je suis entrain de tester les transactions dans mon application
et je gére cela du coté du server ( SQL SERVER 2000).
J'ai une procedure stockée qui va me permettre d'inserer des tuples dans
une
table avec gestion des transactions








"Because @@ERROR is cleared and reset on each statement executed, check it
immediately following the statement validated, or save it to a local
variable that can be checked later."

Code:

CREATE PROCEDURE sp_test_transaction
AS



(?) SET NOCOUNT ON

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'test1')


@@ERROR <> 0


INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'test2')


@@ERROR <> 0

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'test3')


@@ERROR == 0 car SUCCES


IF @@ERROR <> 0
BEGIN
RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
SELECT 0


Plutôt RETURN -1 (par convention 0 == NO_ERROR)
"Most stored procedures follow the convention of using the return code to
indicate the success or failure of the stored procedure. The stored
procedures return a value of 0 when no errors were encountered. Any nonzero
value indicates an error occurred."

END
ELSE
BEGIN
SELECT 1
END

COMMIT TRANSACTION
GO



ma table DEGRE_URGENCE contient actuellement deux enregistrements qui ont
l'
ID 1 et 2. Donc ma procédure stockée ne devrait pas inserer
l'enregistrement
avec l'ID 1 et 3 et ne devrait pas inserer l'enregistrement avec l'ID 6
puisqu'il ya une erreur de conflit de clé avec les enregistrements d'ID 1
et
2. Mais l'enregistrement avec l'ID 6 est insérer tout de meme et je ne le
souhaite po vu qu'il ya eu des problemes auparavant. Normalement la
transaction ne s'est pas effectuer avec succés, donc aucun
n'enregistrement
ne devrait etre insérer. Comment remedier a cela merci d'avance !




Pascal
Avatar
Fred BROUARD
CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'test1')
IF @@ERROR <> 0
GOTO LBL_ERROR

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'test2')
IF @@ERROR <> 0
GOTO LBL_ERROR

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'test3')
IF @@ERROR <> 0
GOTO LBL_ERROR

COMMIT TRANSACTION
RETURN

LBL_ERROR:

RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK TRANSACTION


A +

AD a écrit:
Bonjour,
je suis entrain de tester les transactions dans mon application
et je gére cela du coté du server ( SQL SERVER 2000).
J'ai une procedure stockée qui va me permettre d'inserer des tuples dans une
table avec gestion des transactions

Code:

CREATE PROCEDURE sp_test_transaction
AS

BEGIN TRANSACTION

INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(1,'test1')


INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(2,'test2')
INSERT INTO DEGRE_URGENCE(du_id,du_libelle) VALUES(6,'test3')

IF @@ERROR <> 0
BEGIN
RAISERROR('error occured while recording purchase', 16, 1)
ROLLBACK
SELECT 0
END
ELSE
BEGIN
SELECT 1
END

COMMIT TRANSACTION
GO



ma table DEGRE_URGENCE contient actuellement deux enregistrements qui ont l'
ID 1 et 2. Donc ma procédure stockée ne devrait pas inserer l'enregistrement
avec l'ID 1 et 3 et ne devrait pas inserer l'enregistrement avec l'ID 6
puisqu'il ya une erreur de conflit de clé avec les enregistrements d'ID 1 et
2. Mais l'enregistrement avec l'ID 6 est insérer tout de meme et je ne le
souhaite po vu qu'il ya eu des problemes auparavant. Normalement la
transaction ne s'est pas effectuer avec succés, donc aucun n'enregistrement
ne devrait etre insérer. Comment remedier a cela merci d'avance !



--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************