2010-04-01 9 views
18

¿Cómo combino la ejecución de un procedimiento almacenado y el uso de su resultado o parámetros en una consulta SQL normal?Combinar procedimiento almacenado y consulta en T-SQL

Por ejemplo, me gustaría hacer algo como lo siguiente:

-- passing result of SELECT to SP 
SELECT a, b FROM t 
EXEC my_sp a, b 

-- passing result of SP to INSERT  
INSERT INTO t 
EXEC my_sp a, b 

etc.

+0

¿Puede reescribir su pregunta? No tiene mucho sentido en su forma actual. – JohnFx

+0

@JohnFx: estoy preguntando sobre todas las combinaciones posibles de SP y DML. ¿Por qué no tiene sentido? – abatishchev

+0

Sin ofender, solo creo que el significado de su pregunta se está perdiendo en la traducción algo pobre al inglés. – JohnFx

Respuesta

24

no, es necesario utilizar una tabla temporal

create table #results (col1 int, col2 varchar(5) ...) 

INSERT INTO #results 
    EXEC YourProcedure @parma... 

entonces usted puede unirse a es

SELECT 
    * 
    FROM YourTable  y 
     JOIN #results r ON ... 
    .... 

si no conoce las columnas y los tipos de datos del procedimiento, puede utilizar esta excelente respuesta: Insert results of a stored procedure into a temporary table

En resumen, utiliza OPENROWSET para ejecutar el procedimiento almacenado en una tabla #temp que se crea sobre la marcha, sin la necesidad de nombrar y conocer el tipo de todas las columnas.

4

Si su SP se puede reescribir como una tabla en línea con valores UDF, estos suelen funcionar muy bien y son equivalentes a una vista parametrizada. ITVF se puede usar en cualquier lugar donde use una tabla o vista.

Si su SP no funciona como un TVF en línea (se requiere manipulación de variables locales), puede funcionar como un TVF de varias declaraciones (contiene un BEGIN/END) que puede o no funcionar mal dependiendo de lo que tenga que hacer.

Después de que su SP se haya convertido en UDF, puede llamar al UDF desde su SP (SELECCIONAR * DESDE udf (params)) o en otro lugar, puede usarlo para uniones, etc., por lo que todo su código está dentro el UDF - sin duplicación

Cuestiones relacionadas