Dynamiquement appeler une procédure stockée à partir d'une autre procédure stockée
Je veux être en mesure de passer le nom d'une procédure stockée comme une chaîne de caractères dans une autre procédure stockée et l'ont appelé avec les paramètres de la dynamique. J'obtiens une erreur.
Plus précisément, j'ai essayé:
create procedure test @var1 varchar(255), @var2 varchar(255) as
select 1
create procedure call_it @proc_name varchar(255)
as
declare @sp_str varchar(255)
set @sp_str = @proc_name + ' ''a'',''b'''
print @sp_str
exec @sp_str
exec call_it 'test'
Donc la procédure call_it doit appeler la procédure de test avec des arguments 'a' et 'b'.
Lorsque j'exécute le code ci-dessus, j'obtiens:
Msg 2812, Niveau 16, État 62, Procédure call_it, Ligne 6
Ne pouvait pas trouver la procédure stockée 'test 'a','b".
Toutefois, l'exécution de test 'a','b', qui fonctionne bien.
OriginalL'auteur Greg | 2010-05-31
Vous devez vous connecter pour publier un commentaire.
vous avez besoin de parenthèses
si le proc n'existe pas, le message serait ce
Msg 2812, Niveau 16, État 62, Ligne 1
Ne pouvait pas trouver la procédure stockée 'test'.
il ne serait pas ne Pouvait pas trouver la procédure stockée 'test 'a','b"
Bien que toujours une mauvaise idée avec injection SQL, essayez d'utiliser sp_executeSQL et utiliser des paramètres, voir ici pour la réutilisation des plans de requête: Changer exec pour sp_executesql ne fournit pas de prestations si vous ne l'utilisez pas correctement les paramètres de
OriginalL'auteur SQLMenace
Vous devez utiliser le "sp_executesql" de la procédure. Regardez MSDN - sp_executesql.
OriginalL'auteur TcKs
Vous n'avez pas besoin de tout type de SQL dynamique (
EXEC()
ousp_executesql
) à tout pour parvenir à ce résultat:DBFiddle Démo
De EXÉCUTER:
OriginalL'auteur Lukasz Szozda