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 05/04/2011, 15h56   #1
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Par défaut Trigger et héritage

Bonjour à tous,

j'ai deux table :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE TABLE [dbo].[Tb_Client](
	[Id] [int] IDENTITY(100,1) NOT NULL PRIMARY KEY,
	[Nom] [char](32) NOT NULL,
	[Prenom] [varchar](25) NOT NULL,
	[Ville] [varchar](32) NOT NULL,
	[Tel] [nvarchar](10) NOT NULL,
	[Cp] [int] NOT NULL,
	[Complement] [text] NULL);
 
CREATE TABLE [dbo].[Tb_Entreprise](
	[Id] [int] NOT NULL REFERENCES Tb_Client([Id]),
	[Taux] [int] NULL);
En gros j'ai un client qui peut etre une entreprise et dans ce cas la on renseigne le taux.

Mon problème se situe sur un trigger que je voudrais mettre en place avec instead of. Lorsque j’envoie ma requête, si le client n'est pas une entreprise alors le taux aura comme valeur -1 sinon il sera positif et inférieur à 100.

Voici comment je pensais faire mon trigger :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
CREATE TRIGGER TrgInsertClient 
   ON  [Tb_Client]
   instead of INSERT
AS 
BEGIN
DECLARE 
    @taux int;
SELECT @id = Id, 
	@taux = tx
FROM inserted;
 
IF (@taux != -1) 
BEGIN
   INSERT INTO Tb_client SELECT Id, Nom,Prenom,VIlle,Tel,Cp,Complement FROM inserted;
   INSERT INTO Entreprise SELECT Id, taux FROM inserted;
END
ELSE
BEGIN
   INSERT INTO Tb_client SELECT Id, Nom,Prenom,VIlle,Tel,Cp,Complement FROM inserted;
END
Le probleme c'est que je n'arrive même pas a éxécuter le trigger de plus je pense qu'il va pas trouver le taux. C'est mon premier

Pouvez vous m'aider svp?

Merci d'avance.
Azirius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 18h19   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour


En effet, il y a plusieurs problèmes dans votre trigger :

1/ vous allez chercher la valeur de la colonne tx dans la pseudo table INSERTED, alors que la table sur laquelle se trouve le trigger n'a pas de colonne tx. Si vous voulez faire ainsi, vous pouvez créer une vue qui effectue la jointure entre vos deux tables, placer le trigger sur cette vue, et inserer dans la vue.

2/ Si vous insérez plusieurs lignes en même temps, votre trigger ne fonctionnera pas comme prévu : il comparera un seul taux parmi tous ceux insérés et insera ensuite ce taux pour toutes les lignes de la pseudo table INSERTED.supprimez les variables, et mettez la condition dans la requête d'insertion.

3/il me semble qu'il manque un END à la fin (erreur de copier coller ?)

4/ vous tentez visiblement d'inserer l'identitifant dans la table client alors que cette colonne est en autoincrément


Quelle est votre version de SQL Server ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/04/2011, 20h30   #3
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Bonsoir aieeeuuuuu,

tout d'abord merci pour la réponse.

J'avais pas pensé à la vue en effet et je testerai ça demain en vous tenant au courant ^^

pour le taux a vrai dire c’était une idée et je savais pas du tout si ça allait marcher.

Pour le end, en effet c'est une erreur de copier/ coller :p

puis pour l'id de la table client, que dire sauf que j'ai fais le boulet

Merci bien en tout cas, je teste ça demain et je vous tiens au courant pour le cas ou quelqu'un aurait la même question.

Bonne soirée a tous et merci encore aieeeuuuuu!!
Azirius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 11h22   #4
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Bonjour tout le monde,

donc aieeeuuuuu tu avais raison, j'ai créé une vue et le tour était joué.
Merci beaucoup pour l'aide ^^.

Cordialement Azirius.
Azirius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h53.


 
 
 
 
Partenaires

Hébergement Web