|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : février 2007 Messages : 91 ![]() |
Bonjour,
J'aimerai savoir si on peut contrôler l'ordre dans lequel SQL serveur gère les règles "ON DELETE CASCADE" lorsque qu'une table mère est liée à plusieurs tables filles elles-même liées entres elles. Un exemple : - Soit une table T0 - Soit une table T1 ayant une clé étrangère vers T0, avec suppression en cascade - Soit une table T2 ayant une clé étrangère vers T0, avec suppression en cascade, et une clé étrangère vers T1, sans suppression en cascade. Je souhaite supprimer une ligne de T0. Normalement, grâce à mes cascades, SQL Server devrait supprimer les lignées liées dans les tables T1 et T2. Deux scénario sont possible : - Suppression de la ligne de T2 - Suppression de la ligne de T1 => SUCCESS - Suppression de la ligne de T1 => ECHEC car T2 pointe vers T1 Donc ma question est : puis-je choisir l'ordre dans lequel SQL Serveur repercute les suppressions en cascade sur les tables filles ? C'est un peu compliqué, j'espère que j'ai été assez clair ! Merci d'avance. |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Votre question est idiote. Sachant qu'un ordre SQL est une transaction à part entière, soit tout sera supprimé, soit rien ne le sera. Il n'y a pas de demi mesure et l'ordre n'a donc aucune importance.
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
01
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : février 2007 Messages : 91 ![]() |
Votre réponse l'est tout autant !
En gros ce que vous me dites, c'est que "ou bien ça marchera, ou bien sa me marchera pas". C'est une remarque pleine de profondeur, mais ça me fais de belles jambes. Je reformule donc ma question : comme puis-je m'assurer que ça marche à tous les coups ? |
|
|
01
|
|
|
#4 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Parce que c'est une transaction et que les transaction fonctionnent de manière atomique, c'est à dire en tout ou rien.
A lire donc : Les techniques des SGBDR Transactions et niveau d'isolation A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : février 2007 Messages : 91 ![]() |
Vous seriez aimable d'arrêter de me prendre de haut.
Vous n'avez toujours pas répondu à ma question : mon sujet demande "comment faire", et vous y répondez en disant "parce-que". Je ne vous parle pas de transaction mais du fonctionnement du "on delete cascade". Le fait que tout cela fasse parti d'une transaction est très interessant, mais ça n'est pas de ça que je parle, ce que vous verriez si vous preniez le temps de lire vraiment ma question. Vous êtes donc à coté de la plaque. Merci donc de me répondre vraiment et d'arrêter de me donner des leçons stupides ! |
|
|
00
|
|
|
#6 | |
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
Citation:
J'ai fait quelque tests, ça fonctionne sans soucis. SQL Server semble se débrouiller tout seul pour gérer ce genre de références "circulaires" (ou en tout cas plusieurs chemins de cascade et dépendances). Donc rien à faire. Sinon si vous n'êtes pas convaincu désactivez la FK sur t2 référencant t1 avant la suppression dans t0 : Code :
ALTER TABLE t2 NOCHECK CONSTRAINT FK_t2_vers_t1 |
|
|
|
00
|
|
|
#7 | |
|
Nouveau Membre du Club
![]() Inscription : février 2007 Messages : 91 ![]() |
Citation:
Sinon la solution du "ALTER TABLE t2 NOCHECK CONSTRAINT FK_t2_vers_t1" me parrait bonne aussi. Je passe le sujet en résolu. Merci ! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com