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 :

Imuniser un objet d'une transaction.


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut Imuniser un objet d'une transaction.
    Bonjour,
    J'ai besoin de savoir s'il était possible de faire un autocommit pour une table en particulier au moment ou je fais un une écriture insert ou update malgré qu'elle soit dans une transaction. En gros, s'il y a un rollback dans ma procédure, les données reste quand même présente.

    En faite, dans cette table je fais qu'insérer un texte en brute donc il y pas de relation entre les données présent dans la transaction.

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Vous pouvez utiliser l'instruction SAVE TRANSACTION et la combiner avec des tests pour la valider finalement.

    @++

  3. #3
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut
    Merci beaucoup, je vais m'orienter vers cette voie.

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Cela n'étant pas forcément la meilleure solution, pourriez-vous poster votre code ?

    @++

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 513
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 513
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Cela n'étant pas forcément la meilleure solution, pourriez-vous poster votre code ?

    @++
    En faite, le code est beaucoup trop gros mais je peux donner un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN TRY
    BEGIN TRAN
      INSERT INTO maTable (xxx) VALUES (xxx)
      UPDATE DBO.maTable2 SET Message= CAST(@@ROWCOUNT AS VARCHAR(50)) + ' row inserted';
      COMMIT TRAN
    END TRY
    BEGIN CATCH
      ROLLBACK TRAN
    END CATCH
    Je souhaite que l'update ne puisse être affecté par la transaction. En gros, même si ça a planté je veux conserver le message présent.
    Mon but me permet de savoir jusqu'où l'opération à été et le nombre de lignes affectées. Comme ça va être une procédures lancé via un Job. Si jamais ça plante ça permet d'avoir des informations.

    Merci

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Lorsque vous spécifiez une commande INSERt, UPDATE, DELETE ou SELECT, il s'agit d'un transaction, qui de ce fait doit être atomique.
    Donc si votre INSERT plante, vous aurez 0 lignes affectées, et aucune ligne ne sera ajoutée à votre table.
    Cela permet de conserver votre base de données dans un état cohérent et consistant : si la transaction plante, alors la table sur laquelle celle-ci avait lieu se trouve dans l'état dans lequel elle était avant que vous tentiez d'y insérer des lignes.
    Si la transaction réussit, alors toute application qui consulte les données insérées doit pouvoir les lire, sans aucune ambiguïté : c'est la propriété ACID (Atomicité, Consitance/Cohérence, Isolation, Durabilité) de tout bon SGBD.

    Vous pouvez en revanche dans le traitement de votre CATCH enregistrer dans une table ce que vous retourneront les fonctions ERROR_LINE(), ERROR_NUMBER(), ERROR_PROCEDURE(), ERROR_SEVERITY(), ERROR_STATE(), et la plus intéressante dans votre cas : ERROR_MESSAGE().

    @++

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2013, 16h45
  2. Les Objets utilisé par une Transaction XXYZ ;
    Par kamaldev dans le forum SAP
    Réponses: 1
    Dernier message: 27/08/2008, 23h18
  3. [JSP][Debutant]recuperer un objet d'une page a l'autre
    Par zozolh2 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 17/05/2004, 10h25
  4. Utilisation d'une transaction
    Par Bernard M dans le forum Bases de données
    Réponses: 6
    Dernier message: 21/04/2004, 23h31
  5. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55

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