Bonjour à tous, je suis autodidacte depuis peu en SQL, et j'ai un soucis sur un curseur qui est censé updater un tres grand nombre d'enregistrements (qq chose comme 100 000).
Voyez vous comment je pourrais optimiser ca ? (moins de 30sec si possible)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 DECLARE
@UserCountryCode varchar(30), --Juste pour test
@Version SMALLINT, -- Juste pour test
   @so0Tel2 VARCHAR(30),
   @so0Var19 VARCHAR(30),
   @so0Tel1 VARCHAR(30),
   @so0Fax VARCHAR(30),
   @pe0Tel_prive VARCHAR(30),
   @sp0Fax VARCHAR(30),
   @sp0Tel VARCHAR(30),
   @sp0Mobile_phone VARCHAR(30),
   @NRID DECIMAL
 
set @UserCountryCode='ES' --Juste pour test
set @Version=1 --Juste pour test
 
 DECLARE curs_So0PhNbr CURSOR FOR SELECT nrid, tel2, var19, tel1, fax FROM SYSADM.so0 WHERE var2 = @UserCountryCode and template IS null 
 DECLARE curs_pe0PhNbr CURSOR FOR SELECT pe0.nrid, pe0.tel_prive, sp0.fax, sp0.tel, sp0.mobile_phone FROM SYSADM.pe0 pe0 LEFT OUTER JOIN SYSADM.sp0 sp0 ON pe0.nrid=sp0.pe0_nrid WHERE var1 = @UserCountryCode and pe0.template IS null and sp0.template IS null
 
 OPEN curs_So0PhNbr
 FETCH curs_So0PhNbr INTO @NRID , @so0Tel2, @so0Var19, @so0Tel1, @So0Fax 
 WHILE @@FETCH_STATUS = 0
 BEGIN
    UPDATE SYSADM.so0 SET tel2=SYSADM.fct_FormatNbr(@so0Tel2,@Version),
			  var19=SYSADM.fct_FormatNbr(@so0Var19,@Version),
			  tel1=SYSADM.fct_FormatNbr(@so0Tel1,@Version),
			  fax=SYSADM.fct_FormatNbr(@so0Fax,@Version) 
	              WHERE nrid=@NRID
    FETCH curs_So0PhNbr INTO @NRID , @so0Tel2, @so0Var19, @so0Tel1, @So0Fax
 END
 
 CLOSE curs_So0PhNbr
 DEALLOCATE curs_So0PhNbr
 
  OPEN curs_Pe0PhNbr
 FETCH curs_Pe0PhNbr INTO @NRID, @pe0Tel_prive, @sp0Fax, @sp0Tel, @sp0Mobile_phone
 WHILE @@FETCH_STATUS = 0
 BEGIN	
    UPDATE SYSADM.pe0 SET tel_prive=SYSADM.fct_FormatNbr(@pe0Tel_prive,@Version) 
		      WHERE nrid=@NRID
    UPDATE SYSADM.sp0 SET fax=SYSADM.fct_FormatNbr(@sp0Fax,@Version), 
			  tel=SYSADM.fct_FormatNbr(@sp0Tel,@Version),
			  mobile_phone=SYSADM.fct_FormatNbr(@sp0Mobile_phone,@Version)
		      WHERE pe0_nrid=@NRID
    FETCH curs_Pe0PhNbr INTO @NRID, @pe0Tel_prive, @sp0Fax, @sp0Tel, @sp0Mobile_phone
 END
 
 CLOSE curs_Pe0PhNbr
 DEALLOCATE curs_Pe0PhNbr
On m'a dit par exemple que c'était possible de faire des opérations sur l'enregistrement courant au lieu d'un update...pensez vous que ca résoudrait mon probleme ? et comment faire ?