Bonjour a tous,
J'aimerais avoir votre avis sur une procedure stockee que j'ai faite !
voila je vous explique : j'ai une table ou les internautes vont rentrer des donnees ....a chaque insertion un e mail est envoye au responsable du site qui viendra controler les donnees inserers et les validera si elle sont correctes!
la validation qui est un champ de type varchar() doit respecter une certaine forme (annee_mois_integer)
Voila ce que j'ai fait comme procedure stockee ....pour moi elle tourne j'ai fait quelques essais mais la ou je pense y'aura un stress c'est quand on va changer d'annee le numero unique (integer) ne se remettra pas a 1 !
Pour commencer, je fais mes declarations ensuite je recupere le nombre total de lignes dans la table et aussi le nombre total de lignes ou le num iso est vide ! si ces deux nombres sont egaux c'est qu'il n'y a pas encore eu de num iso donc j'affecte 1 pour la variable @nb et je fais mon update !
sinon je selectionne le numero unique le plus haut grace a max et substring et je fais mon update !
Qu'en pensez vous ?
Pour le changement d'annee, si quelqu'un a une idee....
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 ALTER proc validenc /***********************************************************/ /* Procedure : numero automatique */ /* Fait le : 26/03/05 */ /* ms sql serveur 2000 */ /***********************************************************/ --declaration variables @nbtotal int = 0, @nbiso int =0, @pkp int, --AUTRE @nb varchar(10) = 0, @new varchar(10) = 0, --Date @YY VARCHAR(4) = 0, @MM VARCHAR(2) = 0 --Debut as SELECT @YY=CAST(YEAR(GETDATE()) AS VARCHAR(4)), @MM=CAST(MONTH(GETDATE()) AS VARCHAR(2)) -- Nombre de lignes total ds la table set @nbtotal = (select count(pkprogres) from Tprogres) -- Nombre de ligne ou numiso est vide set @nbiso = (select count(pkprogres) from Tprogres where numiso is null) /*************************************************************/ /* TEST ET OPERATION */ /*************************************************************/ if(@nbtotal = @nbiso) BEGIN set @nb = 1 update Tprogres set numiso = @YY+'_'+@MM+'_'+@nb where pkprogres =@pkp END --Sinon ELSE BEGIN set @nb = (select max(substring(numiso,8,9))as Nbre from Tprogres where numiso is not null) set @new = @nb + 1 update Tprogres set numiso = @YY+'_'+@MM+'_'+@new where pkprogres =@pkp END
Je vous remercie pour vos comments
Bon week end
Christophe
Partager