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,
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
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
Partager