Le SQL dynamique des résultats dans la table temporaire dans la procédure Stockée SQL
Le code est comme suit:
ALTER PROCEDURE dbo.pdpd_DynamicCall
@SQLString varchar(4096) = null
AS
Begin
create TABLE #T1 ( column_1 varchar(10) , column_2 varchar(100) )
insert into #T1
execute ('execute ' + @SQLString )
select * from #T1
End
Le problème est que je veux l'appeler différentes procédures qui peuvent donner en retour les différentes colonnes.
Donc j'aurais de définir la table #T1 de façon générique.
Mais je ne sais pas comment.
Quelqu'un peut m'aider sur ce problème?
- Son comme vous devriez arrêter d'essayer d'utiliser des procédures stockées et de l'utilisation de la plaine de vieux paramétrable des scripts sql.
Vous devez vous connecter pour publier un commentaire.
Essayer:
Et cela sent vraiment mauvais comme une vulnérabilité d'injection sql.
correction (par @CarpeDiem commentaire):
aussi, omettre le
'execute'
si la chaîne sql est autre chose qu'une procédureVous pouvez définir un tableau dynamiquement comme vous l'insérez dans cette dynamique, mais le problème est à la portée de tables temporaires. Par exemple, ce code:
sera de retour avec le message d'erreur "nom d'objet non Valide '#T1'." C'est parce que la table temp #T1 est créée à un "niveau inférieur" que le bloc de l'exécution du code. Pour la fixation, utiliser une approche globale de la table temporaire:
Espère que cette aide,
Jesse
Être prudent de un mondial de la table temporaire de solution car cela peut échouer si deux utilisateurs utilisent la même routine en même temps que un mondial de la table temporaire peut être vu par tous les utilisateurs...
créer un mondial de la table temporaire avec un GUID dans le nom de façon dynamique. Ensuite, vous pouvez l'utiliser dans votre code, via dyn sql, sans s'inquiéter qu'un autre processus appelant même procédure stockée va l'utiliser. Ceci est utile lorsque vous ne savez pas à quoi s'attendre de la sous-jacentes table sélectionnée chaque fois qu'il fonctionne si vous ne pouvez pas créé une table temp explicitement à l'avance. ie - vous besoin d'utiliser SELECT * INTO syntaxe
Ne sais pas si je comprends bien, mais vous pourriez peut-être la forme de l'instruction de création à l'intérieur d'une chaîne de caractères, puis l'exécution de cette Chaîne? De cette façon, vous pouvez ajouter autant de colonnes que vous le souhaitez.