Bonjour,
Je tente d'écrire un trigger sur SQL Server 2008 R2.
J'ai deux tables :
CRM_AR : Contient les colonnes (ID, ID_04, F7042)
Contient des produits
CRM_04 : Contient les colonnes (ID, ID_04, Text)
Contient les traductions des libellés des produits
La colonne ID_04 est une sorte de clé étrangère à l'envers : si CRM_04.ID_04 = CRM_AR.ID_04 alors les colonnes sont liées.
Le logiciel qui utilise la base de donnée est très mal foutu (autant que le modèle des données, c'est pour dire) et ne sait pas utiliser la table CRM_04 pour effectuer des recherche sur les articles (donc pas de recherche pas nom dans la langue de l'utilisateur).
J'ai donc truandé en créant une colonne dans CRM_AR qui contient la concaténation de tous les libellés traduits de l'article. Et lors d'une recherche, je fais une recherche dessus.
Je sais, c'est crade, et discutable d'un point de vue résultat, mais c'est tout ce que j'ai sous la main.
Seulement voilà... Les produits ne sont pas seulement intégrés par moulinette (sur laquelle nous avons la main) mais aussi créés en interactif.
Et évidement, dans le logiciel, aucun mécanisme pour mettre à jour le libellé concaténé.
Voici donc le trigger que je tente d'écrire :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 create trigger trg_crm_04_a_iud on crm_04 after insert, update, delete begin update CRM_AR set F7042 = dbo.group_concat(crm_04.Text) from CRM_04 where ID_04 in ( select id_04 from inserted union select id_04 from deleted ) group by crm_ar.id_04; end;
Et ça compile pas.
Ca non plus d'ailleurs :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 update CRM_AR set F7042 = dbo.group_concat(crm_04.Text) from CRM_04 where ID_04 in ( select id_04 from crm_04 ) group by crm_ar.id_04;
Ca semble venir du group by...
Une idée pour rectifier le truc ?
Faites pas attention à group_concat, c'est une fonction de mon cru, qui fonctionne très bien (cf. la section contribution).
Imaginez que je cherche à mettre à jour l'entête du'ne commande avec le SUM() du prix des lignes dont elle est constituée à chaque fois que je fais une modification sur les postes.
Partager