Procédure stockée et paramètre varchar contenant une liste
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
Code:
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 |
Dans le 2nd cas, j'utilise du sql dynamique
Code:
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 |
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.
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