2010-06-14 5 views
30

J'ai une procédure stockée qui, se terminant par un SELECT, renvoie un jeu d'enregistrements. Je peux l'appeler dans une autre procédure stockée comme ceci:TSQL: appel d'une procédure stockée à partir d'une autre procédure stockée et lecture du résultat

EXEC procedure @param 

Comment obtenir le jeu d'enregistrements de retour? Merci

+2

Cela ressemble à votre procédure stockée devrait vraiment être une vue: http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx –

+2

Pourquoi feriez-vous cette déclaration? Qui sait ce qui se passe dans le proc stocké sous la forme de mises à jour etc ... –

Répondre

2

AFAIK, vous ne pouvez pas. Ce que vous voulez probablement faire est d'utiliser une fonction pour votre première (ou les deux) procédures. Les fonctions peuvent seulement retourner une chose, mais elles peuvent retourner une table. Les procédures stockées peuvent renvoyer plusieurs résultats, mais pas d'autres fonctions/procédures stockées.

.: par exemple

CREATE FUNCTION [dbo].[fn_GetSubordinates] (
    @sPersonID VARCHAR(10), 
    @nLevels INT 
) 
RETURNS @tblSubordinates TABLE 
(
    Person_Id VARCHAR(10), 
    Surname char(25), 
    Firstname char(25) 
) 
AS 
BEGIN 
    ... 
29

Vous pouvez créer une table temporaire puis utilisez INSERT INTO #MyTable EXEC procedure @param.

Il existe d'autres techniques listed here.

1

Vous pouvez le faire avec une variable de sortie dans la procédure stockée. Par exemple:

CREATE PROCEDURE sp_HelloWorld @MyReturnValue int OUT 
AS 
SELECT @MyReturnValue = 100 
Return @MyReturnValue 

Pour appeler cette procédure stockée, procédez comme suit:

DECLARE @TestReturnVal int 

EXEC sp_HelloWorld @TestReturnVal output 
SELECT @TestReturnVal 
0

D'abord, vous ne pouvez pas RETOUR une procédure stockée par recordset. En retour, une procédure stockée ne peut renvoyer que des entiers.

Vous avez mentionné SELECT instruction, qui est un DQL et juste pour l'affichage. La façon dont vous pouvez contourner ce problème est que vous pouvez affecter le jeu d'enregistrements à une table temporaire globale qui peut également être accessible dans la procédure stockée externe.

Questions connexes