Bonsoir à tous et à toutes, cela fait 2 jours que je suis sur un problème que je n'arrive pas à résoudre et je me suis finalement résolu à vous demander un petit peu d'aide face à la bête
Je vais essayer d'expliquer en étant le plus concis possible :
Je possède une table avec 4 Colonnes qui sont : Id | état | numéro | version ;
table temporaire que j'ai crée pour faciliter la lisibilité de mes table pour ma procédure.
Le numéro et la version se trouve dans une table annexe qui est : dbo.devis_facture
L’état se trouve dans une table annexe : dbo.etat_devis_facture
L'Id est présent dans les deux tables.
l'id est unique pour chaque version, numéro ou état d'un devis.
le numéro est global pour toutes les versions et état des devis d'un client
la version est unique pour chaque numéro d'un devis.
l'état quand à lui est unique pour chaque version d'un devis.
En gros j'ai un numéro de devis qui se compose en plusieurs versions qui se composent en plusieurs états et tout ça est inscrit par un ID diffèrent.
Mon problème est que pour chaque état je dois faire en sorte que les états des précédentes versions s'accumulent par ID pour pouvoir y avoir accès.
Un exemple : Le numéro du client est 12
Pour le moment, j'ai un numéro 12 comportant 4 versions (1-2-3-4) La version 1 comporte 2 états, (Ce qui nous donne 1 ID par version soit 2 ID (Admettons 20-21)) Si je passe à la version 2 de ce numéro, L'ID sera 22, et pour l'ID 22 je n'aurai plus accès qu'à son état 1 de la version 2 du numéro 12. Ce que je dois réaliser est de faire en sorte qu'à cet ID 22 je puisse avoir accès aux deux premiers état de la version 1 PLUS l'état 1 de la version 2 du numèro 12. En gros l'état actuel plus les deux précédents...
J'espère m'être plus ou moins bien fais comprendre, aussi, pour ceux qui voudraient m'aider et qui m'auraient compris, je ne vous demande pas de faire le boulot à ma place, j'ai déjà commencé et je n'aimerai pas ça, je voudrai juste des avis sur ma façon de procéder ou quelques petites astuces qui pourraient m'aider...
Je vous link mon code actuel :
En gros j'ai commencé par créer un curseur pour trier mes tables (biensur elles ne sont pas trier c'est là toute la magie de ce géantissime b*****) Ensuite j'ai déjà tester plusieurs hypothéses sur un deuxiemes curseur ou un While mais rien n'y a fait...
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 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --CREATE PROCEDURE dbo.AutoIncrementEtat_parVersion --AS --BEGIN --SET NOCOUNT ON; DECLARE @idDF bigint; DECLARE @idEtat smallint; DECLARE @num int; DECLARE @vers int; DECLARE @n int; DECLARE myCursor1 CURSOR FOR SELECT TOP 10000 etat.[iddevis_facture],[numero], [version],[idetat_devis_facture] FROM dbo.etat_devis_facture etat INNER JOIN dbo.devis_facture df ON etat.iddevis_facture = df.iddevis_facture ORDER BY numero ASC ; OPEN myCursor1 FETCH NEXT FROM myCursor1 INTO @idDF,@num,@vers,@idEtat WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO dbo.TableTempo(id,numero,versions,etat) SELECT df.iddevis_facture,numero,[version],etat.idetat_devis_facture FROM dbo.etat_devis_facture etat INNER JOIN dbo.devis_facture df ON etat.iddevis_facture =df.iddevis_facture WHERE df.iddevis_facture=@idDF AND [version]=@vers AND etat.idetat_devis_facture = @idEtat ORDER BY [version] ASC; FETCH NEXT FROM myCursor1 INTO @idDF,@num,@vers,@idEtat END CLOSE myCursor1; DEALLOCATE myCursor1;
Merci d'avance à tout le monde,
Etudiant en BTS SIO 2éme Année
Partager