Exécuter la procédure stockée sql en passant des paramètres de la requête
J'ai essayé beaucoup de temps pour passer de la requête en paramètre à l'exécution d'une stored procedure
. Mais c'est donner le temps de compilation d'erreur à chaque fois. Ci-dessous mon query
exec IAM_INSERT_ASSET (select top 1 ItemID from MIR_ItemMaster order by ItemID desc),1662
Il y a deux paramètres, dont la première est dynamique par la requête et la deuxième est codée en dur. Obviously I can do this by keeping query in variable and passing variable.
Mais je ne veux pas déclarer de variable et de transmettre la requête directement à la procédure. Comment cela peut-il être atteint. Toute aide?
- Quels sont les types de données de la procédure stockée? Le même que ItemID? Utiliser une variable. l'exécution de la procédure est l'une déclaration de sorte qu'il ne peut pas avoir une autre déclaration en elle.
- Type de données est la même que de paramètre
- Pourquoi n'utilisez-vous pas variable? Je pense que c'est le moyen de transmettre les paramètres de la dynamique.
- Oui bien sûr, mais il existe un certain nombre de procédures qui y sont tous les paramètres de la dynamique. J'ai donc pensé qu'il serait bon de passer des requêtes.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je n'ai pas accès à SQL Server maintenant, cela peut ne pas fonctionner.
Deuxièmement, je ne comprends pas pourquoi vous ne voulez pas utiliser une variable, c'est de loin la solution la plus simple. Si vous êtes à la construction de vos procédures stockées pour être trop intelligent - par exemple, ont IAM_INSERT_ASSET se comportent différemment selon le premier paramètre valeurs, je vous recommande de le reconsidérer. Les procédures stockées sont difficiles à tester, difficile à déboguer, et difficile à comprendre d'un point de vue architectural, de sorte que vous finissent souvent par la rupture d'une procédure stockée par le biais d'un apparemment sans changement (par exemple, ajout d'une colonne à une table).
Enfin, si vous voulez vraiment pour ce faire, vous pouvez utiliser SQL dynamique. Si vous modifiez le premier paramètre à une colonne de type varchar, et ensuite utiliser
sp_executeSQL
pour exécuter le contenu de cette colonne de type varchar, vous pouvez passer ce que vous voulez. Mise en garde - je ne sais pas si cela fonctionne, peut pas l'essayer. Mise en garde d'autres - ce qui peut rendre votre système fragile et ne parviennent pas passionnants.Tous1 que vous pouvez fournir à un
EXEC
énoncé littéral valeurs ou des variables. Voici la syntaxe documentée pourEXEC
:Que c'est. Ainsi, vous aurez à aller à la variable route.
1 Vous pouvez également utiliser un quelques des fonctions intégrées, comme
@@IDENTITY
, qui a utilisé pour être une "variable globale", mais c'est l'exception plutôt que la règle.@eraj
Je reçois votre requête de base.
Cependant, je ne pense pas qu'il se fait exactement de la manière que vous voulez, c'est à dire en passant de la requête en tant que paramètre.
Cela peut être fait de deux façons que je ressens.
1) Écrire un curseur avec cet SÉLECTIONNER et Exécuter le SP à partir de l'intérieur du curseur.
Comme je l'ai dit, ce serait lent que l'enfer depuis si votre requête retourne 1000 lignes, la SP à l'exécution de 1000 fois la connexion à la DB à chaque fois.
Vous pouvez améliorer les performances un peu en mettant l'ensemble de données dans un #temp_table et une boucle dans une boucle WHILE. Il serait au moins découpé sur la connexion à la DB à chaque fois.
2) La deuxième option est de construire l'exécution de la déclaration elle-même par le biais d'une requête SELECT.
Mais vous l'esprit, les deux ne sont pas très bon pour les performances dans le cas où vous travaillez avec une énorme quantité de données.
Pourquoi ne pas définir le premier paramètre de type varchar et transmet la requête comme une chaîne de caractères?
Essentiellement, il devait ressembler,
Peut-être que cela va fonctionner?