Bonjour,

Je suis en train de migrer des procs stockées d'une BDD Sybase vers une BDD SQL Server et je suis tombé sur un cas qui me laisse perplexe. J'ai tenté quelquechose mais je ne suis pas sur du résultat et je ne peux pas tester car je n'ai pas encore l'accès à la BDD. Je compte donc sur votre expérience.

Voici un exemple de type de proc coté Sybase:

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
 
SELECT transfer.cd_acv,   
         ...  
         transfer.dt_pse_ctn_mbl,   
         zonstk_a.cd_hal,   
         zonstk_a.cd_zon_lgs,   
         transfer.dt_pos_ctn_mbl,   
         zonstk_b.cd_hal,   
         zonstk_b.cd_zon_lgs,   
         transfer.no_tft,
         transfer.cd_ori_ctn_mbl, 
         locctn_a.cd_zon_stk,
         locctn_a.no_emp_zon_stk,
         locctn_b.cd_zon_stk,
         locctn_b.no_emp_zon_stk
 
FROM locctn locctn_a,   
         transfer,   
         zonstk zonstk_a,   
         locctn locctn_b,   
         zonstk zonstk_b  
WHERE ( transfer.cd_ctn_mbl *= locctn_a.cd_ctn_mbl ) 
   and   ( transfer.cd_ori_ctn_mbl *= locctn_a.cd_ori_ctn_mbl )  
   and   ( transfer.no_loc_ctn_pse *= locctn_a.no_loc_ctn )   
   and   ( locctn_a.cd_zon_stk *= zonstk_a.cd_zon_stk )  
   and   ( transfer.cd_ctn_mbl *= locctn_b.cd_ctn_mbl )  
   and   ( transfer.cd_ori_ctn_mbl *= locctn_b.cd_ori_ctn_mbl )  
   and   ( transfer.no_loc_ctn_pos *= locctn_b.no_loc_ctn )  
   and   ( locctn_b.cd_zon_stk *= zonstk_b.cd_zon_stk ) 
   and   ( transfer.cd_ctn_mbl like @cd_ctn_mbl or (transfer.cd_ctn_mbl = null and @cd_ctn_mbl = '%'))
...

J'ai migré de cette façon:

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
 
SELECT transfer.cd_acv,   
         ...
         transfer.dt_pse_ctn_mbl,   
         zonstk_a.cd_hal,   
         zonstk_a.cd_zon_lgs,   
         transfer.dt_pos_ctn_mbl,   
         zonstk_b.cd_hal,   
         zonstk_b.cd_zon_lgs,   
         transfer.no_tft,
         transfer.cd_ori_ctn_mbl, 
-- MODIFS
         locctn_a2.cd_zon_stk,
         locctn_a2.no_emp_zon_stk,
         locctn_b2.cd_zon_stk,
         locctn_b2.no_emp_zon_stk
 
FROM      transfer LEFT JOIN locctn locctn_a ON transfer.cd_ctn_mbl = locctn_a.cd_ctn_mbl
				         AND transfer.cd_ori_ctn_mbl = locctn_a.cd_ori_ctn_mbl
				         AND transfer.no_loc_ctn_pse = locctn_a.no_loc_ctn
		LEFT JOIN locctn locctn_b ON transfer.cd_ctn_mbl = locctn_b.cd_ctn_mbl
					AND transfer.cd_ori_ctn_mbl = locctn_b.cd_ori_ctn_mbl
					AND transfer.no_loc_ctn_pos = locctn_b.no_loc_ctn,   
         locctn locctn_a2 LEFT JOIN zonstk zonstk_a ON occtn_a2.cd_zon_stk = zonstk_a.cd_zon_stk,
	locctn locctn_b2 LEFT JOIN zonstk zonstk_b ON tn_b2.cd_zon_stk = zonstk_b.cd_zon_stk
 
WHERE   ( transfer.cd_ctn_mbl like @cd_ctn_mbl or (transfer.cd_ctn_mbl = null and @cd_ctn_mbl = '%'))
...
Pensez-vous que le résultat sera le même ?

Merci d'avance pour vos réponses.

Vincent