pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 2021
-
30 mai 2011 à 11:39
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 2021
-
1 juin 2011 à 09:49
Bonjour je crée actuellement une base de donnée enregistrant toutes les actions effectuées sur un logiciel de supervision. Cependant, seul une partie de ces infos m'intéresse. Ma base commençant à avoir une taille conséquente je me demandais si il était possible de faire des tris sur les données entrantes c'est à dire que par exemple ne pas enregistrer les données où un champs contient certains mots clé et également de supprimer les messages vieux de x années.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 30 mai 2011 à 12:27
Salut,
Pour supprimer les messages de x années il suffit de faire un delete avec une clause where sur les dates d'enregistrement (à toi de voir suivant ton modèle).
Pour conditionner l'insertion de tuple il te faudra utiliser un trigger (déclencheur) sur cette action. Pour plus d'info voici le tuto de sqlfr.com sur le sujet.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 31 mai 2011 à 14:08
Pour les DateTime il faut voir ces deux fonctions :
- GETDATE : permet d'avoir la date courante (aujourd'hui en somme),
- DATEDIFF(datepart, startdate, enddate) : permet de calculer la différence entre deux dates.
Avec ça tu auras les billes pour faire la différence entre la date d'insertion de l'enregistrement et la date courante, et ainsi faire la clause WHERE de ton DELETE avec cette différence supérieure à 7 ans.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 31 mai 2011 à 15:53
Ta requête me parait pas mal (*) par contre je l'aurai pas mise dans le TRIGGER, je l'aurais balancée à la mano en oneshot. Mais du coup je ne comprends pas bien ton dernier problème.
(*) deux choses à voir :
- inverse GETDATE() et Champ_date, sinon tu vas travailler sur des chiffres négatifs,
- DATEDIFF fait une différence un peu pourrie (faut pas se le cacher), par exemple : DATEDIFF(year, '31-12-2010', '01-01-2011') va renvoyer "1 an" alors que dans les faits il n'y a qu'un jour entre les deux dates.
Vous n’avez pas trouvé la réponse que vous recherchez ?
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 31 mai 2011 à 08:15
Merci pour le tuto, celui ci est très explicite, cependant comment créer un trigger sur sql server je n'ai pas trouvé ça sur le net et je n'ai pas l'aide sur mon sql server 2005 ?
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 31 mai 2011 à 08:58
Dans l'arborescence je ne peux pas créer des "database trigger". J'ai donc créer un trigger manuellement avec la console :
CREATE TRIGGER Supress
ON Ma_Table
AFTER INSERT
as
Delete FROM Ma_Table Where champ1 like '%mots_clé1%' or champ1 like '%mots_clé2%'
Cependant quand j'exécute mon code j'ai ce message d'erreur :
Msg 9001, level 21, State 1, Procédure supress, Line 8
Le journal de la base de données "ma_base" n'est pas disponible. Consultez le journal des évènements pour voir s'il contient des messages d'erreurs.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 31 mai 2011 à 09:12
Alors là ...
Et tu as tenté de "consulter le journal des événements pour voir s'il contient des messages d'erreur liés à ce problème" et de "résoudre toutes les erreurs et redémarrez la base de données" ?
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 31 mai 2011 à 09:26
Ah oui, il va se déclencher automatiquement "après une insertion dans la table Ma_Table", c'est sa définition.
Pour avoir pas mal usé de ce mécanisme sous Oracle, c'est quelque chose de plutôt sûr et franchement pratique ;)
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 31 mai 2011 à 11:29
Bon eh bien bizarrement ça a marché juste pour le mots clé 1 et maintenant mes enregistrements se font dans le désordre total et de plus mon trigger ne fonctionne plus
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 31 mai 2011 à 13:34
Je n'ai pas d'autre Trigger en place donc je ne pense pas que cela vienne d'un conflit =S.
Par comment dans le trigger comment pourrais je faire une comparaison de date car je voudrai supprimer automatiquement les données vieilles de 7ans et j'ai un champ dédié à la date d'entrée de l'enregistrement cependant il est au format DateTime.
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 31 mai 2011 à 16:29
Ok c'est bon ça marche nikel =), en fait vu que j'inversais getdate et champ_date j'obtenais une valeur négative donc je ne supprimais rien. Par contre j'ai vraiment l'impression que mes triggers ne se déclenchent pas je pense mal faire la procédure.
Pour créer mon trigger sous sql server express 2005 je fais new query puis j'entre mon code vu plus haut. Sauf que lorsque ma base reçois des enregistrements, mon trigger ne se déclenche pas =S
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 31 mai 2011 à 16:38
Faut déjà que je te dise un truc : j'ai jamais bossé avec SQL Server, je connais assez bien le SQL pour avoir fait beaucoup d'Oracle (dont Oracle Forms) et pas mal de MySQL. Du coup je sais pas à quoi ressemble l'interface du client SQL Server. D'ailleurs j'utilise surtout Toad ("for Oracle" ou "for MySQL").
Lorsque tu as copié puis exécuter le CREATE TRIGGER, tu as eu un message comme quoi le script était bien passé ? Y'a-t-il un affichage où tu peux voir toutes les infos d'une table, voir si ton TRIGGER y est bien référencé ?