Trigger SQL 2000 (URGENT)

cs_mbik Messages postés 31 Date d'inscription mardi 1 avril 2008 Statut Membre Dernière intervention 10 mars 2011 - 5 mars 2011 à 14:27
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

2 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
15 mars 2011 à 14:28
Bonjour

Quel est le type de la colonne telephone ?
0
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,

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 ;)

@++ ;)
0
Rejoignez-nous