Bonjour aux pro de SQL,
Je suis entrains de faire une mise à jour de table avec un curseur, mais je remarque que
dans ma table mise à jour j'ai des valeurs existant qui sont encore insérées. ma condition est que que si
l'association comptebancairecode et comptebancairesousrole n'existe pas dans la table transco alors
insert une ligne dans la table transco avec une valeur constante codedom avec l'association comptebancairecode et comptebancairesousrole
j'ai besoin de votre aide
mon code est le suivant:
le resultat est le suivant:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 DECLARE @temp VARCHAR(255) DECLARE @codeBMDM VARCHAR(255) DECLARE @sousrole VARCHAR(255) DECLARE @association VARCHAR(255) DECLARE curs_sansDEF CURSOR FAST_FORWARD FOR SELECT DISTINCT C.[comptebancaire_code] ,C.[comptebancaire_sousRole] FROM [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] C where C.comptebancaire_codeDOM is null OPEN curs_sansDEF FETCH NEXT FROM curs_sansDEF INTO @codeBMDM, @sousrole WHILE @@FETCH_STATUS = 0 BEGIN SET @association = @codeBMDM SET @association += @sousrole PRINT @association IF @sousrole IN (SELECT T.CBsousrole from [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] T, [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] C WHERE T.CBsousrole = C.comptebancaire_sousRole AND T.codeDomELODIE<>'DEF' AND C.comptebancaire_codeDOM is null AND C.comptebancaire_code != T.CBcode) BEGIN SELECT @temp= (select(max(T.codeDomELODIE)+1) from [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] T inner join [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] C on T.CBsousrole=C.[comptebancaire_sousRole] AND C.comptebancaire_codeDOM is null AND T.codeDomELODIE<>'DEF') INSERT INTO [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] VALUES(@temp,@codeBMDM,@sousrole) END IF @association NOT IN (SELECT T.CBcode +T.CBsousrole from [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] T, [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] C WHERE T.CBsousrole = C.comptebancaire_sousRole AND T.codeDomELODIE<>'DEF' AND C.comptebancaire_codeDOM is null AND C.comptebancaire_code = T.CBcode) BEGIN INSERT INTO [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] VALUES('DX1',@codeBMDM,@sousrole) END UPDATE [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] SET [comptebancaire_codeDOM]=T.codeDomELODIE FROM [MW_CONCEPTION].[dbo].[WS_COMPTE_BANCAIRE] C inner join [MW_CONCEPTION].[dbo].[TRANSCO_MW-01] T ON T.CBcode = C.comptebancaire_code AND T.CBsousrole=C.[comptebancaire_sousRole] WHERE C.comptebancaire_codeDOM is null FETCH NEXT FROM curs_sansDEF INTO @codeBMDM, @sousrole END CLOSE curs_sansDEF DEALLOCATE curs_sansDEF
id codeDomELODIE CBcode CBsousrole
1 01 29006 73300500|FOUR|FAPP|0960
3 02 29005 73452000|AGRI|TNA|0960
4 003 29005 73452000|FOUR|FAPP|0960
35 05 20000 74054120|AGRI|TNA|0960
409 DEF 73300500FOURFAPP0960 73300500|FOUR|FAPP|0960
410 DEF 73300500FOURFGEN72 73300500|FOUR|FGEN|72
411 DEF 73452000AGRITNA0960 73452000|AGRI|TNA|0960
412 DEF 73452000FOURFAPP0960 73452000|FOUR|FAPP|0960
601 DX1 29005 73452000|FOUR|FAPP|0960
602 DX1 29006 73300500|FOUR|FAPP|0960
603 DX1 29007 73300500|FOUR|FGEN|72
606 DX1 29010 73453100|FOUR|FAPP|0960
607 6 44369 74054120|AGRI|TNA|0960
608 DX1 44369 74054120|FOUR|FAPP|0960
Partager