Bonjour,
Est-il possible, au sein d'une transaction dans une procédure stockée, qu'un ordre SQL ne soit pas concerné par la transaction,
c'est à dire que si j'annule la transaction cet ordre SQL ne sera pas annulé ?
Merci de votre aide
Version imprimable
Bonjour,
Est-il possible, au sein d'une transaction dans une procédure stockée, qu'un ordre SQL ne soit pas concerné par la transaction,
c'est à dire que si j'annule la transaction cet ordre SQL ne sera pas annulé ?
Merci de votre aide
Bonjour,
Oui. En déclarant explicitement le début et la fin d'une transaction et en encapsulant l'ordre sql concerné dans cette transaction.
Exemple :
++Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 -- Table 1 CREATE TABLE dbo.test ( col1 int ); GO -- Table 2 CREATE TABLE dbo.test2 ( col2 int ); GO -- Procédure test_proc CREATE PROCEDURE test_proc AS INSERT INTO dbo.test VALUES (1); BEGIN TRAN ; INSERT INTO dbo.test2 VALUES (1); ROLLBACK TRAN; GO -- Exécution procédure EXEC test_proc; GO -- Vérification résultats SELECT * FROM dbo.test SELECT * FROM dbo.test2
Merci Mikedavem,
je comprend que les ordres passés avant l'ouverture de la transaction ne seront pas concernés,
Mais ma question est pour un ordre SQL au milieu de la transaction :
Comment faire pour que l'ordre 2 soit 'Hors transaction',Code:
1
2
3
4
5
6 begin Tran Ordre 1 : Update Table1 ... Ordre 2 : Insert Table2 ... (comment faire pour que cette commande ne soit pas concernée par la transaction) ordre 3 : Update Table3 ... Rollback Tran
sachant qu'il doit impérativement se trouver après l'ordre 1 et avant l'ordre 3
Merci
Ce n'est pas possible, selon moi.
C'est possible, mais complexe car il faut "passer par l'extérieur". En effet une transaction dans une base de données c'est atomique, c'est à dire tout le traitement dans la base est effectué ou bien rien n'est effectué. Il n'existe pas de fait partiellement. Mais il faut dire que ceci ne concerne que ce qui est fait dans la base de données et non pas ce qui est fait en dehors de la base (ou des bases du serveur)....
Par exemple vous pouvez écrire dans un fichier ceci ne sera pas annulé par la transaction.
A +
Merci SQLpro
Je suis prêt a y passer le temps, c'est vital
et de manière plus générale j'ai besoin de maitriser à fond le fonctionnement des transactions
As-tu des références sur ce sujet ? (en français)
(J'ai vu tes articles sur les transactions imbriquées et sur les niveaux d'isolation)
Que veut dire 'Passer par l'extérieur' ?
Ouvrir une deuxième session par T-SQL?
Et à travers un serveur lié ? (SQLserver ou autre)
Merci
Bonjour,
Cela veut dire que vous êtes pour cela obligé de stocker en dehors de SQL Server et de son environnement transactionnel les données que vous voulez voir modifiées, que la transaction soit validée ou non.Citation:
Que veut dire 'Passer par l'extérieur' ?
Ouvrir une deuxième session par T-SQL?
Vous ne pouvez pas non plus, car la transaction est distribuée, et sera donc également annulée sur le serveur lié ...Citation:
Et à travers un serveur lié ? (SQLserver ou autre)
@++ ;)