Bonjour,
Je doit mettre à jour une ligne dans une table suite à la modification d'une autre ligne de cette même table.
Je vous passe le détail sur la sélection de la ligne à modifier, mon problème est dans la récupération des valeurs de la table temporaire INSERTED.
Le code ci-dessous fonctionne mais n'est ni beau ni performant, je répète n fois le select ... from inserted.
Existe-t-il un moyen plus rapide d'assigner aux colonnes à mettre à jour les valeurs des colonnes respectives du résultat du select ... from inserted?
Merci d'avance.
Code : 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 ALTER TRIGGER [dbo].[UPDATE_ORDERLINE_CA] ON [dbo].[COMCLIDETCCD] AFTER UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; declare @NumLigOrigine int set @NumLigOrigine = (select NUMLIGCCD from inserted where REFSOCCCD in ('AG','CH') and (IDNOTECCD is null or IDNOTECCD = '')) if @NumLigOrigine <> 0 begin -- Chercher la clé unique où trouver le n° de commande de la ligne 'CA' declare @CleUniCCH varchar(8) set @CleUniCCH = (select REFSOCCCD + cast(NUMCMDCCD as varchar(6)) from inserted where NUMLIGCCD = @NumLigOrigine) -- Chercher le n° de commande de la ligne 'CA' declare @NumCmdCA int set @NumCmdCA = (select substring(dbo.COMCLIHEACCH.CMDASMCCH,3,6) from dbo.COMCLIHEACCH where CLEUNICCH = @CleUniCCH) -- Chercher le n° de la ligne 'CA' declare @NumLigneCA int set @NumLigneCA = (select LIGCMDCCD from inserted where NUMLIGCCD = @NumLigOrigine) if @NumLigOrigine <> 0 and @NumCmdCA <> 0 and @NumLigneCA <> 0 begin -- Dupliquer la ligne de commande AG ou CH en ligne CA (en évitant de dupliquer les lignes provenant de Lotus notes qui le sont déjà, dupliquées) update [dbo].[COMCLIDETCCD] set MAJUTICCD=(select MAJUTICCD from inserted where NUMLIGCCD = @NumLigOrigine), MAJDATCCD=(select MAJDATCCD from inserted where NUMLIGCCD = @NumLigOrigine), MAJHEUCCD=(select MAJHEUCCD from inserted where NUMLIGCCD = @NumLigOrigine), REFSOCCCD=(select REFSOCCCD from inserted where NUMLIGCCD = @NumLigOrigine), ... LOTEMBCCD=(select LOTEMBCCD from inserted where NUMLIGCCD = @NumLigOrigine) where CLEUNICCD = 'CA' + cast(@NumCmdCA as varchar(6)) + REPLICATE('0', 2 - LEN(CAST(@NumLigneCA AS VARCHAR(2)))) + CAST(@NumLigneCA AS VARCHAR(2)) end end END
Partager