2010-06-14 36 views
30

Tengo un procedimiento almacenado que, terminando con SELECT, devuelve un conjunto de registros. Puedo llamarlo dentro de otro procedimiento almacenado como este:TSQL: llame a un procedimiento almacenado desde otro procedimiento almacenado y lea el resultado

EXEC procedure @param 

¿Cómo obtener el juego de registros de devolución? Gracias

+2

Parece que su procedimiento almacenado realmente debería ser una vista: http://msdn.microsoft.com/en-us/library/aa258253%28SQL.80%29.aspx –

+2

¿Por qué haría esta afirmación? ¿Quién sabe qué está pasando en el proceso almacenado en forma de actualizaciones, etc. ... –

Respuesta

2

AFAIK, no se puede. Lo que probablemente quiera hacer es usar una función para sus primeros (o ambos) procedimientos. Las funciones solo pueden devolver una cosa, pero pueden devolver una tabla. Los procedimientos almacenados pueden devolver resultados múltiples, pero no a otras funciones/procedimientos almacenados.

ej .:

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

Puede crear una tabla temporal y luego usar INSERT INTO #MyTable EXEC procedure @param.

Hay otros techniques listed here.

1

Usted puede hacer esto con una variable de salida en el procedimiento almacenado. Por ejemplo:

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

Para llamar a este procedimiento almacenado, haga lo siguiente:

DECLARE @TestReturnVal int 

EXEC sp_HelloWorld @TestReturnVal output 
SELECT @TestReturnVal 
0

En primer lugar, no se puede RETORNO un conjunto de registros mediante el procedimiento almacenado. A cambio, un procedimiento almacenado solo puede devolver enteros.

Mencionó la declaración SELECT, que es un DQL y solo para mostrar.

La forma en que puede hacer para evitar este problema es que puede asignar el conjunto de registros a una tabla temporal global a la que también se puede acceder dentro del procedimiento almacenado externo.

Cuestiones relacionadas