10
votes

Sélectionner contre la procédure stockée SQL Server

Sélectionnez VAL à partir de StoredP_Value Code> Dans l'éditeur de requête du SQL Server Management Studio, est-ce possible?

MISE À JOUR IN> P>

J'ai essayé de créer Une table Temp mais il ne semblait pas fonctionner, pourquoi j'ai demandé ici. P>

 select batchno_seq from (delete from batchno_seq;insert into batchno_seq default values;
 select *  from batchno_seq) BATCHNO 
 INTO TEMP_DW_EKSTICKER_CLASSIC


5 commentaires

Non ce n'est pas possible. Vous devez utiliser des fonctions si c'est une exigence.


@Nenadzivkovic, j'ai besoin de supprimer et d'insérer cependant, qui de ce que j'ai lu n'est pas possible.


Ou vous pouvez utiliser «Solution de contournement» en créant une table Temp, insérant des résultats de SP dans celui-ci, puis choisissez dans la table TEMP.


Supprimer et insérer quoi et où? Veuillez fournir plus d'informations et d'exemples dans la question, et peut-être que nous pouvons plus facilement venir à une solution.


Quelle erreur recevez-vous dans votre exemple? Comment ça ne marche-t-il pas?


6 Réponses :


14
votes

Eh bien, non. Pour sélectionner dans une procédure stockée, vous pouvez effectuer les éléments suivants: xxx

Si vous utilisez les résultats d'une procédure stockée de cette manière et vous avez écrit la procédure stockée, envisagez sérieusement de changer le code pour être une fonction de vue ou définie par l'utilisateur. Dans de nombreux cas, vous pouvez remplacer ce code avec une construction plus simple et mieux adaptée.


0 commentaires

5
votes

Ce n'est pas possible dans SQL Server, vous pouvez insérer les résultats dans une table Temp, puis une requête supplémentaire que xxx pré>

ou vous pouvez utiliser openquery code> mais ceci Nécessite de la configuration d'un serveur lié, le SQL est P>

SELECT * FROM (ThisServer, 'Database.Schema.ProcedureName <params>')


1 commentaires

Vous n'avez plus besoin de répéter les colonnes dans la partie "INSERT dans", SQL remplira la table sans les spécifier explicitement.



0
votes

Essayez ceci

​​Modifier 'Retour' ' P>

delete from batchno_seq;   
insert into batchno_seq default values;
select @batchno_seq= batchno_seq_no from batchno_seq
SELECT @batchno_seq


0 commentaires

0
votes

Mon approche xxx


0 commentaires

2
votes

Le meilleur article (à mon avis) sur toutes les méthodes possibles de partage de données entre les procédures stockées dans SQL Server Vous pouvez trouver ici: http://www.sommarskog.se/share_data.html


0 commentaires

0
votes

Je dois manquer quelque chose.

Étant donné que votre procédure stockée ne renvoie pas un ensemble de résultats, et renvoie plutôt un entier, à l'aide de la fonctionnalité de retour des Procs stockés, vous ne pouvez tout simplement pas insérer dans une table (puisqu'il n'y a pas de Tout ensemble de résultats revenant, du tout).

Mais vous pouvez (en supposant que cela se produise itérativement, et non sur un ensemble) stocke simplement la valeur de retour dans une variable locale et insérez la valeur de la variable. Dans n'importe quelle table est nécessaire.

Toutefois, si vous souhaitez simplement renvoyer la valeur dans les résultats d'une fenêtre de requête dans SSMS, effectuez l'insertion et la sélection sont surchargées. Il me semble que cela suffirait (dans une fenêtre de requête): xxx

S'il s'agit de la base de la base, veuillez fournir le DDL pour "Batchno_seq", peut-être que je peux être d'une meilleure aide de cette façon.

acclamations!


1 commentaires

FTR, je suis d'accord avec @gordonlinoff, dans ce cas, votre "procédure stockée par lots" serait implémentée beaucoup plus simple en tant que Scalar UDF (à nouveau, en supposant que cela n'agit pas sur un ensemble)