|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 3 ![]() |
Bonjour, je souhaite créer un Trigger en SQL qui vérifie le nombre d'inscription maximal à un groupe précis(dans mon exemple, le maximum par groupe est de 4).
Voici le code qui pose problème, car je peux entrer autant de membre que je veux dans un groupe : Code :
P.S. Ma table inscription contient 2 variables et clés primaires --> no_membre et no_groupe |
||
|
|
00
|
|
|
#2 | ||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 3 ![]() |
J'ai fait quelques modifications qui semblent fonctionner, mais je ne suis pas certain que ce code soit performant :
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() |
Vous vérifiez toute la table...
Ne vérifiez la règle que pour les données insérées (table inserted...). exemple: vous ajoutez une ligne, vous n'avez à vérifier la règle que pour le no_groupe appartenant à la ligne insérée.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#4 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Ibersek à, raison, il faut faire comme ceci :
Code :
__________________
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 | |||||
|
Membre Expert
![]() |
Citation:
Euh... cette syntaxe ne fonctionnera pas sous SQL SERVER, il faut préciser dans le select: Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
Et pourtant non... testé sous SS 2008...
Bizarrement avec le *, il dit que no_groupe est invalide dans la liste etc...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
ne dit-il pas plutôt que le nom de colonne est invalide ?
Dans la requete de SQLPro, et dans la tienne, c'est écrit no_group/no_groupe... comme je disais aussi, il manque un alias dans la group by, que tu as ajouté... Mais, je ne vois pas pourquoi le SELECT * serait incorrect, tant que la requête est bien dans un opérateur EXISTS Effectivement, la requête en elle même est incorrecte sinon, car toutes les colonnes ne sont pas dans le GROUP BY |
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Effectivement le SELECT * est incorrecte du fait du GROUP BY. Faites SELECT 0 SELECT 1 ou SELECT NULL !
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
|
|
|
#10 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
pour ma part (SqlServer 2008) cela fonctionne :
Code SQL :
Bizare... Mais dans tous les cas, il faudrait plutot écrire le trigger comme ceci : Code SQL :
Afin de permettre les insertions multiples pour le même groupe, ce que le trigger avec jointure interdira pour plus de deux lignes... |
||||
|
|
00
|
|
|
#11 | ||||
|
Membre du Club
![]() Inscription : juillet 2005 Messages : 178 ![]() |
Dans le même style j'ai un souci pour tester l'unicité d'un trigger
Exemple J’ai une table avec Id, CC_Eu, CC_Us, on ne peut pas avoir de CC_EU dupliqué et CC_Us lorsqu’il y a un code. Exemple dans la table (test) Code :
Code :
Il n’y a pas une autre méthode plus jolie ou efficace.... Merci de votre aide |
||||
|
|
00
|
|
|
#12 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Si j'ai bien compris votre problème (CC_EU doit être NULL ou avoir une valeur unique, idem pour CC_US), il vous suffit d'un index unique filtrant les null sur chaque colonne Code SQL :
Code SQL :
|
||||
|
|
10
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
__________________
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 * * * * * |
|
10
|
|
|
#14 |
|
Membre du Club
![]() Inscription : juillet 2005 Messages : 178 ![]() |
Encore une fois j’admire la pertinence de vos réponses..
Ps : si par hasard vous cherchez un boulot en Belgique ...... J'ai une bonne adresse pour vous ;-) .... |
|
|
00
|
|
|
#15 | |||||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Citation:
|
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com