|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 305 ![]() |
Je rencontre quelques difficultés à mettre au point les triggers sur mes tables.
Je rentre dans le vif du sujet avec la déclaration d'une table (qui servira d'exemple) Code :
Et voici les triggers que j'ai créé : Celui-ci sert à mettre la date et l'heure dans la colonne APRL_UPDATE et calcul aussi le bon numéro de version pour le record. Code :
Ce trigger vérifie si on modifie le champ APRL_LIB. Si oui, on remplace l'update par un insert car c'est une nouvelle version (le champ APRL_LIB ne peut jamais être modifié). Si non, on fait l'update normalement. Code :
Même si je comprends bien de quelle erreur il s'agit, je ne vois pas où se trouve ma faute. Quelqu'un pourrait-il y jeter un regard plus avisé que le mien ? Merci d'avance. Griftou. |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Votre code n'est pas un code ensembliste. Ainsi il ne traitera qu'une seule ligne au hasard.
En principe vous ne devriez avoir aucune variable locale mais uniquement des requêtes. En sus votre table est mal conçue et votre pseudo auto incrément catastrophique en terme de perf... 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
|
|
|
#3 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 305 ![]() |
J'ai du mal à comprendre...
Je pense comprendre le pourquoi du "il ne traitera qu'une ligne au hasard". Si vous faites référence à l'initialisation des variables avec une requête de selection sur la table inserted, l'application qui utilisera la base de données est prévue pour ne mettre à jour qu'une ligne à la fois. C'est pour cela que je fais un select sans condition. Pour le reste, j'ai fait avec les moyens du bord (comprendre "les connaissances que je possède). S'il existe de meilleure manière de procéder, je suis ouvert aux suggestions. Cependant, même si la table est mal conçue et le code catastrophique en terme de performance, cela devrait néanmoins fonctionner non ? |
|
|
00
|
|
|
#4 | ||||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Voici un exemple de ce que vous devriez faire :
Code :
Code :
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
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 305 ![]() |
Bien qu'il ne soit pas bien long, j'ai du mal à comprendre votre trigger... :-/
J'ai donc ajouté un champ APRL_ID de type int avec une auto-incrémentation. J'ai modifié le trigger mis en place sur l'update avec le votre et après tests, il modifie la version de toutes les lignes pour y mettre le dernier numéro... P-e ai-je oublié quelque chose mais je vois pas quoi pour le moment. EDIT : Ca y est, j'ai compris le trigger EDIT 2 : Je pense avoir trouvé... Je fais les modifs et je donne un feedback EDIT 3 : Ca fonctionne !!!!!! Encore un tout grand merci à SQLpro |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 305 ![]() |
Bonjour,
Je me permets de rouvrir ce topic car j'ai une question supplémentaire concernant le trigger instead of update. Pour rappel, voici le code : Code :
Supposons que l'utilisateur crée un groupe, le nomme "premier groupe" et l'enregistre. Par après, il se rend compte que "Premier groupe" serait plus présentable. Une modification de ce genre n'est pas prise en compte car apparemment, pour sql serveur, "premier groupe" est équivalent à "Premier groupe". Comment faire pour rendre la condition se trouvant sur la dernière ligne du trigger case sensitive ? Et juste celle-là. Je sais qu'il est possible de configurer le serveur pour qu'il le soit mais ce n'est pas ce que je veux. Il y a plein d'autres moments où je suis bien content qu'il ne soit pas case sensitive ^^. J'ai un peu cherché (p-e pas assez, je le concède) et je n'ai pas trouvé de réponse satisfaisante à mon problème. Est-ce seulement possible ? Merci d'avance, Griftou. |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Analyste / Programmeur Inscription : juillet 2006 Messages : 1 305 ![]() |
Problème résolu !
J'ignore si c'est la manière la plus propre de le faire mais j'ai pu, dans la définition de la table, indiquer que cette colonne est case sensitive dans la propriété collation. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com