Bonjour,
Dans le cade de récupération de données d'une base vers une autre, j'ai créé une table de mappage des Devises entre ceux de la base source et ceux de la base cible,
la valeur retourné est une seule valeur donc je peux la faire via une fonction scalaire
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
CREATE FUNCTION udf_scal_Devise
(@SD_No INT, 
 @SO_ID INT
)
RETURNS INT
AS
     BEGIN
         RETURN
         (
             SELECT DV_Id
             FROM 
                  P_SOCIETEDEVISE sd
             WHERE sd.SD_No = @SD_No
                   AND sd.SO_Id = @SO_Id
         );
     END;
et l'appel sera :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
SELECT dbo.udf_scal_Devise(r.N_Devise + 1, 1) as DV_ID, 
       r.RG_No, 
       r.CT_NumPayeur, 
       r.RG_Montant
FROM 
     BIJOU.dbo.F_CREGLEMENT r;

Est ce que passer par une fonction table sera plus performant plus que le scalaire ?

NB : j'ai évité de passer par une jointure puisque la base source peut avoir plusieurs format (parfois une base ERP et parfois des fichiers plats) donc je pense que déjà par une fonction rend mon code plus générique et réutilisable