Bonjour,
J'ai une procédure stockée avec un paramètre de type varchar qui permet de passer une "liste".
Je souhaite avoir vos avis concernant l'utilisation ou non de sql dynamique pour les performance d'exécution de la procédure stockée.
Exemple : le 1er paramètre contient une liste d'une centaine d'éléments et le second 2-3 éléments et souvent les mêmes
Dans le 1er cas, j'utilise un fonction SPLIT qui retourne une table
Dans le 2nd cas, j'utilise du sql dynamique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE PROC TEST @param1 varchar(max), @param2 varchar(max) BEGIN SELECT * FROM ma_Table INNER JOIN monSPLIT(@param1) s1 ON s1.value = ma_Table.value1 INNER JOIN monSPLIT(@param2) s2 ON s2.value = ma_Table.value2 END
J'ai remarqué que le second cas était plus rapide à l'exécution, néanmoins, certaines personnes me déconseillent d'utiliser du sql dynamique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE PROC TEST @param1 varchar(max), @param2 varchar(max) DECLARE @vCmd nvarchar(MAX), @vStatemt nvarchar(500) BEGIN SET @vCmd = 'SELECT * FROM ma_Table INNER JOIN monSPLIT(@param1) s1 ON s1.value = ma_Table.value1 WHERE ma_Table.value IN ( ' + @param2 + ') ' SET @vStatemt = N'@pparam1 VARCHAR(max)'; EXEC sp_executesql @vCmd, @vStatemt, @pparam1=@param1; END
Quels sont vos avis? en fait c'est le SPLIT qui renvoie une TABLE qui est trop gourmand (jointure en plus) avez-vous une autre solution?
merci
Partager