Bonjour,
J'ai une application C# (VS 2008) qui depuis un filtre doit retourner un résultat issu d'une BDD.
Pour cela, j'ai développé une procédure stockée dans SQL Server 2005.
Les paramètres de mon filtre sont envoyés lors de l'appel de la procédure depuis C#.
Pour l'instant, rien de bien compliqué.
Suite à une évolution, je dois inclure un nouveau paramètre sur mon filtre de mon application.
Cette fois, ce n'est plus un paramètre du type date début, date fin, numéro, etc.. mais un groupe de valeur auquel le résultat doit au moins appartenir à une de ces valeurs. (exemple: je cherche toutes les personnes dont le prénom et 'Jean' ou 'Pierre' ou 'Paul')
Pour cela, je modifie ma procédure pour y placer un IN (maColonne IN ('Jean', 'Pierre', 'Paul')
Bien entendu, j'ai un soucis pour passer mon paramètre à ma procédure pour qu'il soit exploitable. (@param2 = '''Jean'', ''Pierre'', ''Paul''' et maColonne IN (@param2)). Ca, c'est pas possible et j'ai pas d'autre solution.
On me conseille donc de transformer toute ma procédure stockée pour en faire une concaténation de chaine SQL que j'exécute avec exec.
=> exec @Select + @From + @Where + @ GroupBy où chaque variable est un morceau de la procédure sous forme de chaine de caractères.
Ceci marche super bien mais alors voici ma question:
Quel est alors l'intérêt de faire une procédure stockée qui fait un exec d'une chaine de caractère, plutôt que de créer et d'éxécuter directement cette chaine depuis mon appli C#??
Dans les 2 cas, SQL devra recompiler la requête => plus d'interêt d'utiliser la procédure stockée.
J'espère avoir été clair
Merci de m'éclaircir ce point en tout cas.
Partager