Trigger SQL 2000 (URGENT)

Messages postés
31
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
10 mars 2011
- - Dernière réponse : elsuket
Messages postés
6
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
22 mars 2011
- 22 mars 2011 à 02:58
Bonjour,

Je viens vers vous pour trouver une solution à un problème qui pour certains n'en sera certainement pas un.
J'explique, j'ai une une table avec un champ TELEPHONE. Ce champ se rempli en fonction des appels entrants reçus. Malheureusement les n° ne sont pas remplis au complet. C'est à dire que si j'ai reçu un appel du n° 0148444444, l'enregistrement au niveau de la base prend en compte les 08 derniers chiffres ou les 07 derniers chiffres!!!

A ce que j'ai entendu, les triggers peuvent corriger cela avec le déclenchement d'un update pour chaque enregistrement. SVP comment puis je effectuer le paramétrage de sorte que les 02 premiers ou 03 premiers chiffres manquants soient complétés sachant que ce sera à chaque fois les même chiffres à rajouter lors de la mise à jour???


Rien de plus sympa que l'entraide en info
Afficher la suite 

2 réponses

Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
0
Merci
Bonjour

Quel est le type de la colonne telephone ?
Commenter la réponse de aieeeuuuuu
Messages postés
6
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
22 mars 2011
0
Merci
Bonjour,

Vous pouvez écrire le trigger AFTER UPDATE comme suit :

CREATE TRIGGER TR_A_I_maTable
ON dbo.maTable
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON

UPDATE		dbo.maTable
SET		telephone = CASE LEN(I.telephone)
WHEN 7 THEN '338' + I.telephone
WHEN 8 THEN '08' + I.telephone
FROM		dbo.maTable AS T
INNER JOIN	inserted AS I ON T.colonne_cle_primaire = I.colonne_cle_primaire
END
GO


Néanmoins, cela vous oblige à faire l'INSERT + l'UPDATE du trigger, ce qui est dommage.
Vous pouvez donc écrire à la place un trigger INSTEAD OF :

CREATE TRIGGER TR_IOF_INSERT
ON dbo.maTable
INSTEAD OF INSERT
AS
BEGIN
INSERT	dbo.maTable
(
listeDesColonnesDeMaTable
)
SELECT	lesColonnes
,  CASE LEN(telephone)
WHEN 7 THEN '338' + telephone
WHEN 8 THEN '08' + telephone
FROM	inserted
END


qui lui ne fera que l'INSERT, en corrigeant au passage le téléphone.

Cela dit, il serait probablement plus malin de faire cela dans votre application, avant de procéder à l'INSERT ...
Au pire, faites donc une procédure stockée qui prend en paramètre une valeur pour chacune des colonnes de votre table, et corrige le téléphone au besoin ;)

@++ ;)
Commenter la réponse de elsuket