IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

ordre SQL non concerné par la transaction en cours


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut ordre SQL non concerné par la transaction en cours
    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

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    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
    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    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 :

    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
    Comment faire pour que l'ordre 2 soit 'Hors transaction',
    sachant qu'il doit impérativement se trouver après l'ordre 1 et avant l'ordre 3

    Merci

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Ce n'est pas possible, selon moi.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    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/ * * * * *

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Merci SQLpro
    Citation Envoyé par SQLpro Voir le message
    C'est possible, mais complexe
    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)

    Citation Envoyé par SQLpro Voir le message
    car il faut "passer par l'extérieur".
    Que veut dire 'Passer par l'extérieur' ?
    Ouvrir une deuxième session par T-SQL?

    Citation Envoyé par SQLpro Voir le message
    et non pas ce qui est fait en dehors de la base (ou des bases du serveur)
    Et à travers un serveur lié ? (SQLserver ou autre)

    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/09/2009, 12h03
  2. Réponses: 7
    Dernier message: 24/11/2008, 15h55
  3. [SQL] Classement sql et affichage par ordre croissant
    Par Overstone dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/08/2007, 00h18
  4. Réponses: 1
    Dernier message: 08/08/2007, 11h26
  5. fonction utilisateur non reconue par sql server 2000
    Par ouedmouss dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/09/2005, 07h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo