est-ce qu'une procedure est direment en transaction ?
exemple quand je suis dans une procedure et que je fais un
begin tran TOTO
@@TRANCOUNT indique deja 2
quand je rollback TOTO il m'envoi un mess d'erreursi je rollback tout court
il annule tout y compris celle de la procedure stockée dans laquelle je suis
?le but c'est d'annuler que la transaction nommée TOTO ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian Robert
Bonjour,
Une procédure stockée ne fait pas implicitement partie d'une transaction.
Il faut soit explicitement faire un BEGIN TRANSACTION ou avoir l'option SET IMPLICIT_TRANSACTIONS à ON (auquel cas la première instruction de manipulation des données la démarre). Si vous faites un ROLLBACK il annule l'ensemble des transactions en cours et pas seulement celle dont vous précisez le nom.
Dans votre exemple, vous avez du executer 2 fois le code ou avoir l'instruction SET évoqué plus haut et vous avez sans doute oublié le ROLLBACK, ce qui a pour effet de pas décrémenter @@TRANCOUNT. Verifiez le paramètre IMPLICIT_TRANSACTIONS, faite un SET à OFF si vous n'êtes pas sûr et verfifiez que @@TRANCOUNT est à 0 avant le EXEC, si ce n'est pas le cas executez ROLLBACK jusqu'à que ce compteur soit à 0.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
Bonjour,
est-ce qu'une procedure est direment en transaction ?
exemple quand je suis dans une procedure et que je fais un begin tran TOTO @@TRANCOUNT indique deja 2 quand je rollback TOTO il m'envoi un mess d'erreursi je rollback tout court il annule tout y compris celle de la procedure stockée dans laquelle je suis ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Une procédure stockée ne fait pas implicitement partie d'une transaction.
Il faut soit explicitement faire un BEGIN TRANSACTION ou avoir l'option SET
IMPLICIT_TRANSACTIONS à ON (auquel cas la première instruction de
manipulation des données la démarre).
Si vous faites un ROLLBACK il annule l'ensemble des transactions en cours et
pas seulement celle dont vous précisez le nom.
Dans votre exemple, vous avez du executer 2 fois le code ou avoir
l'instruction SET évoqué plus haut et vous avez sans doute oublié le
ROLLBACK, ce qui a pour effet de pas décrémenter @@TRANCOUNT. Verifiez le
paramètre IMPLICIT_TRANSACTIONS, faite un SET à OFF si vous n'êtes pas sûr et
verfifiez que @@TRANCOUNT est à 0 avant le EXEC, si ce n'est pas le cas
executez ROLLBACK jusqu'à que ce compteur soit à 0.
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Christophe" a écrit :
Bonjour,
est-ce qu'une procedure est direment en transaction ?
exemple quand je suis dans une procedure et que je fais un
begin tran TOTO
@@TRANCOUNT indique deja 2
quand je rollback TOTO il m'envoi un mess d'erreursi je rollback tout court
il annule tout y compris celle de la procedure stockée dans laquelle je suis
?le but c'est d'annuler que la transaction nommée TOTO ??
Une procédure stockée ne fait pas implicitement partie d'une transaction.
Il faut soit explicitement faire un BEGIN TRANSACTION ou avoir l'option SET IMPLICIT_TRANSACTIONS à ON (auquel cas la première instruction de manipulation des données la démarre). Si vous faites un ROLLBACK il annule l'ensemble des transactions en cours et pas seulement celle dont vous précisez le nom.
Dans votre exemple, vous avez du executer 2 fois le code ou avoir l'instruction SET évoqué plus haut et vous avez sans doute oublié le ROLLBACK, ce qui a pour effet de pas décrémenter @@TRANCOUNT. Verifiez le paramètre IMPLICIT_TRANSACTIONS, faite un SET à OFF si vous n'êtes pas sûr et verfifiez que @@TRANCOUNT est à 0 avant le EXEC, si ce n'est pas le cas executez ROLLBACK jusqu'à que ce compteur soit à 0.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
Bonjour,
est-ce qu'une procedure est direment en transaction ?
exemple quand je suis dans une procedure et que je fais un begin tran TOTO @@TRANCOUNT indique deja 2 quand je rollback TOTO il m'envoi un mess d'erreursi je rollback tout court il annule tout y compris celle de la procedure stockée dans laquelle je suis ?le but c'est d'annuler que la transaction nommée TOTO ??
Rudi Bruchez
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est possible en utilisant le principe des points de sauvegarde. Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide en ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas @@TRANCOUNT
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est
possible en utilisant le principe des points de sauvegarde.
Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide en
ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas
@@TRANCOUNT
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est possible en utilisant le principe des points de sauvegarde. Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide en ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas @@TRANCOUNT
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
Christophe
si il ne decremente pas @@trancount ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Merci !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de news:1te2tpyw21s50.nt53ebixxfd9$
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est possible en utilisant le principe des points de sauvegarde. Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide
en
ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas @@TRANCOUNT
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
si il ne decremente pas @@trancount
ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Merci !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de
news:1te2tpyw21s50.nt53ebixxfd9$.dlg@40tude.net...
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est
possible en utilisant le principe des points de sauvegarde.
Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide
en
ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas
@@TRANCOUNT
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
si il ne decremente pas @@trancount ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Merci !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de news:1te2tpyw21s50.nt53ebixxfd9$
>> ?le but c'est d'annuler que la transaction nommée TOTO ??
Bonjour,
Ajout pour complétude : le ROLLBACK d'une partie d'une transaction est possible en utilisant le principe des points de sauvegarde. Voir "Transaction Savepoints" ou "SAVE TRANSACTION" dans les BOL (l'aide
en
ligne)
A noter que le ROLLBACK d'un point de sauvegarde ne décrémente pas @@TRANCOUNT
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
Rudi Bruchez
Christophe a écrit:
si il ne decremente pas @@trancount ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de transactions imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom de transaction (le plus à l'extérieur) est inscrit avec le système. Une annulation vers tout autre nom (autre que celui d'un point de sécurité valide) génère une erreur. Dans ce cas, aucune des instructions exécutées avant l'annulation n'est en fait annulée au moment où l'erreur se produit. Les instructions ne sont annulées que lorsque l'instruction extérieure est elle-même annulée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
Christophe a écrit:
si il ne decremente pas @@trancount
ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la
seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de transactions
imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom
de transaction (le plus à l'extérieur) est inscrit avec le système. Une
annulation vers tout autre nom (autre que celui d'un point de sécurité
valide) génère une erreur. Dans ce cas, aucune des instructions exécutées
avant l'annulation n'est en fait annulée au moment où l'erreur se produit.
Les instructions ne sont annulées que lorsque l'instruction extérieure est
elle-même annulée.
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
si il ne decremente pas @@trancount ca risque de me faire un message d'erreur sur le global alors ?
Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de transactions imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom de transaction (le plus à l'extérieur) est inscrit avec le système. Une annulation vers tout autre nom (autre que celui d'un point de sécurité valide) génère une erreur. Dans ce cas, aucune des instructions exécutées avant l'annulation n'est en fait annulée au moment où l'erreur se produit. Les instructions ne sont annulées que lorsque l'instruction extérieure est elle-même annulée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
Christophe
je te remercie avec le point d'enregistrement ca à marché !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de news:lphn09y71bby$
Christophe a écrit:
> si il ne decremente pas @@trancount > ca risque de me faire un message d'erreur sur le global alors ? > > Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de
transactions
imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom de transaction (le plus à l'extérieur) est inscrit avec le système. Une annulation vers tout autre nom (autre que celui d'un point de sécurité valide) génère une erreur. Dans ce cas, aucune des instructions exécutées avant l'annulation n'est en fait annulée au moment où l'erreur se produit. Les instructions ne sont annulées que lorsque l'instruction extérieure est elle-même annulée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/
je te remercie avec le point d'enregistrement ca à marché !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de
news:lphn09y71bby$.ptmvvsy3ddhx.dlg@40tude.net...
Christophe a écrit:
> si il ne decremente pas @@trancount
> ca risque de me faire un message d'erreur sur le global alors ?
>
> Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la
seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de
transactions
imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom
de transaction (le plus à l'extérieur) est inscrit avec le système. Une
annulation vers tout autre nom (autre que celui d'un point de sécurité
valide) génère une erreur. Dans ce cas, aucune des instructions exécutées
avant l'annulation n'est en fait annulée au moment où l'erreur se produit.
Les instructions ne sont annulées que lorsque l'instruction extérieure est
elle-même annulée.
--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
je te remercie avec le point d'enregistrement ca à marché !
"Rudi Bruchez" <"rudi#nospam#[at]babaluga.com"> a écrit dans le message de news:lphn09y71bby$
Christophe a écrit:
> si il ne decremente pas @@trancount > ca risque de me faire un message d'erreur sur le global alors ? > > Sinon comment faire pour pouvoir rollbacker une partie precise ?
Le point d'enregistrement (c'est la bonne traduction française...) est la seule méthode.
Extrait de l'aide SQL :
L'attribution d'un nom à plusieurs transactions d'une série de
transactions
imbriquées a peu d'effet sur la transaction. En effet, seul le premier nom de transaction (le plus à l'extérieur) est inscrit avec le système. Une annulation vers tout autre nom (autre que celui d'un point de sécurité valide) génère une erreur. Dans ce cas, aucune des instructions exécutées avant l'annulation n'est en fait annulée au moment où l'erreur se produit. Les instructions ne sont annulées que lorsque l'instruction extérieure est elle-même annulée.
-- Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, Solutions MS SQL Server et informatique libre. MCDBA, SCJP2 http://www.babaluga.com/