Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2011, 12h09   #1
Invité régulier
 
Homme Kamel Ghanem
Enseignant
Inscription : août 2011
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Kamel Ghanem
Localisation : Algérie

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : août 2011
Messages : 42
Points : 7
Points : 7
Par défaut Trigger qui ajoute dans une autre table

Salut tout le monde

j'ai écrit un trigger qui me permet qu'à chaque fois que j'insers une nouvelle valeur d'une colonne C1 à une table T1 le trigger insert la meme valeur de colonne C1 à une autre table T2 mais le problème c'est qu'il insert la valeur de colonne en double , par exemple si j'ajoute 1 à la table T1 il m'affiche dans la table T2 1 1 :

T1 -----C1-------
1

T2 -----C1-------
1
1

Voici mon code :

Code :
1
2
3
4
5
CREATE TRIGGER tr_insert ON eleves 
FOR INSERT 
AS 
INSERT INTO evaluations(idelv)
SELECT idelv
la structure des deux tables :
eleves(idelv,nom,pren,datenais,lieunais,#classeid,...)
evaluations(idelv,idmat,idtrim,note)

idelv PK dans la table eleves
le triplet (idelv,idmat,idtrim) Clé composée (idelv : FK ; idmat : FK ; idtrim : FK) issues des tables eleves , matieres , trimestres respectivement voici la structure des tables matieres et trimestres :

matieres(idmat,libmat,typemat)

trimestres(idtrim,libtrim,datedebut,datefin)

donc la table evaluations n'est autre qu'une table qui est engendrée ou issue de la relation ternaire entre : eleves , matieres et trimestres ce que je veux c'est en fait saisir les notes(le champ "note") des élèves sans resaisir les "idelv" , "idmat" et "idtrim" car en fait ils sont déjà saisies et enregistrés dans leurs tables respectives c'est pour ça que je veux crée un Trigger pour qu'il puisse ajouter automatiquement les "idelv" , "idmat" et "idtrim" dans la table evaluations à chaque fois que j'ajoute ces memes clés primaires dans les tables : eleves , matieres et trimestres

En fait je veux qu'à chaque fois que j'ajoute un nouvel élève(idelv) le trigger ajoute le meme "idelv" à la table evaluations car à mon avis le champs idelv qui est une clé étrangère dans la table evaluations ne nécéssite pas qu'on le resaisi encore une fois d'où l'idée de créer un trigger pour ajouter automatiquements les "idelv" à la table evaluations.

Encore une chose , vu que la table evaluations contient trois clés étrangères n'est-il pas possible d'intégrer en un seul trigger la possibilité d'ajouter automatiquement les "idelv" dans la table eleves , les "idmat" dans la table matieres et enfin les "idtrim" dans la table trimestres. Merci d'avance
devman2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 06h43   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 670
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 670
Points : 8 732
Points : 8 732
Bonjour,

Citation:
saisir les notes(le champ "note") des élèves sans resaisir les "idelv" , "idmat" et "idtrim" car en fait ils sont déjà saisies et enregistrés dans leurs tables respectives c'est pour ça que je veux crée un Trigger pour qu'il puisse ajouter automatiquement les "idelv" , "idmat" et "idtrim" dans la table evaluations à chaque fois que j'ajoute ces memes clés primaires dans les tables : eleves , matieres et trimestres
C'est le principe même du modèle relationnel : aucune duplication de données.

Citation:
En fait je veux qu'à chaque fois que j'ajoute un nouvel élève(idelv) le trigger ajoute le meme "idelv" à la table evaluations car à mon avis le champs idelv qui est une clé étrangère dans la table evaluations ne nécéssite pas qu'on le resaisi encore une fois d'où l'idée de créer un trigger pour ajouter automatiquements les "idelv" à la table evaluations.
Certes, mais il faut lui ajouter une note.
C'est donc votre application qui doit collecter l'idelv, l'idmat et l'idtrim ET la note, puis les passer à une procédure stockée qui se charge de réaliser l'INSERT dans la table dbo.evaluations.
La colonne note (comme toutes les autres colonnes d'ailleurs) de la table dbo.evaluations ne peuvent pas être non-valuées : elles ont la propriété NOT NULL.
Ceci est normal car ne pas valuer l'un des attributs de cette relation n'a pas de sens.
Il en est donc de même pour ajouter une ligne dans la table dbo.evaluations sans note.

En conséquence, vous avez besoin d'un procédure stockée, pas d'un trigger.

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 14h37   #3
Invité régulier
 
Homme Kamel Ghanem
Enseignant
Inscription : août 2011
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Kamel Ghanem
Localisation : Algérie

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : août 2011
Messages : 42
Points : 7
Points : 7
Merci beaucoup de vos précieux conseils mais vu mes limites dans la création de procédures stockées pouvez-vous me donner un exemple pour que je puisse s'appuyer dessus pour l'écrire car je débute à peine en base de données SQL SERVER car j'étais un adepte d'ACCESS.Merci de tout ce vous faites pour tous ceux qui vous viennes en aide.

NB : Pour l'exemple je souhaite qu'il ressemble à peu de chose près à mon modèle de données c'est-à-dire concernant 4 tables , je m'excuse encore une fois.
devman2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h37.


 
 
 
 
Partenaires

Hébergement Web