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

MS SQL Server Discussion :

Transaction ou pas?


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut Transaction ou pas?
    Bonjour,

    Enlevez moi un doute, si j'efface plusieurs records d'une même table avec une seule requete je n'ai pas besoin de transaction?

    Exemple j'efface de la table Etudiant tous les étudiants inscris avant 2000
    Les 5 premiers records ne posent pas de problème mais le 6ème a un problème d'intégrité qui m'empeche de l'éffacer

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Ce n'est pas un problème de transaction.
    Ton étudiant est probablement clé étrangère d'une autre table, et tu n'a pas du dire : "On delete cascade", du coup tu essayes de supprimer un étudiant qui est affecté, par exemple, à une classe.
    C'est interdit puisque la classe possède cet étudiant, donc il ne peut oas être effacé avant d'être supprimé de la classe.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    Non non ma question n'est pas pourquoi il y a une erreur mais de savoir si ca a une utilité de faire de faire une transaction pour un delete

    J'ai récupéré du code, dans celui-ci
    il commmence une transaction
    Appelle une procedure qui efface les étudiant dont l'année d'inscription < @Annne
    Clos la transaction

    Pour moi la transaction ne sert à rien

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 : 21 998
    Billets dans le blog
    6
    Par défaut
    Tout ordre SQL est par nature ensembliste. Si un élément de l'ensemble manipulé viole une contrainte ou part en erreur alors rien n'est effectué, quelque soit l'ordre SQL (SELECT, INSERT, UPDATE, DELETE, MERGE...).
    Donc un ordre SQL est une transaction à part entière.

    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/ * * * * *

  5. #5
    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 : 43
    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,

    Sous SQL Server, toute requête est implicitement transactionnelle.
    On peut par ailleurs créer des transactions explicites à l'aide de BEGIN TRANSACTION et ROLLBACK TRANSACTION, qui encadrent plusieurs requêtes.

    Dans les deux cas, s'il l'une d'entre-elles échoue, quelle que soit la raison, alors la requête ou les requêtes dans la transaction explicite sont annulées.

    Dans le cas de BenoitM où l'on n'a qu'une seule requête, la déclaration explicite de la transaction est inutile, même si je ne pense pas que cela nuise aux performances.

    @+

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 193
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/05/2013, 16h13
  2. Réponses: 5
    Dernier message: 16/10/2008, 19h14
  3. Réponses: 3
    Dernier message: 01/06/2006, 16h26
  4. BEGIN TRANSACTION ne fonctionne pas (webapp et pool)
    Par ouragan44 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 12/04/2006, 10h30
  5. La requête COMMIT TRANSACTION n'a pas de BEGIN TRANSACTION !
    Par BalBalNet dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/03/2006, 17h21

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