post icon

Como hacer un SELECT * FROM EXECUTE STORED_PROCEDURE en SQL Server

Una de las cosas más buscadas sobre procedimientos almacenados en SQL Server que he visto, es como hacer un select de la misma y volver a aplicar filtros o unirlas con otras tablas en una query. Y a diferencia de algunos motores que permiten hacer algo parecido a la sintaxis que lleva por titulo este post, en SQL Server no se puede hacer de dicha forma.

Para lograr algo parecido a eso, podemos valernos de varias técnicas, cada una con pros y contras. La que a casi toda persona se le ocurriría es convertir el procedimiento almacenado en una función de tabla, la cual es una excelente idea en muchos casos, especialmente cuando no se realizan manipulaciones de datos en la misma (ya que las funciones no lo permiten).

Una segunda alternativa es utilizar OPENQUERY, pero ésta probablemente sea la peor de todas las elecciones, ya que se utiliza SQL dinámico, lo cual siempre he recalcado que debe evitarse a toda costa y que casi siempre es reemplazable por otro método, un ejemplo sería así:

SELECT  *
INTO    #tmpTable
FROM    OPENQUERY(SERVIDOR, 'EXEC test.dbo.mi_sp param1, param2');

Y la manera más interesante en los casos de incluir sentencias de manipulación de datos es volcar el resultado del SP a una tabla, que puede ser una tabla temporal, una variable de tipo tabla o incluso una tabla real, cual usar ya dependeria de cada contexto, y la sintaxis sería así

INSERT INTO tabla_sp EXEC test.dbo.mi_sp param1, param2;

SELECT * FROM tabla_sp;

SELECT * FROM articulos JOIN tabla_sp ON articulos.id = tabla_sp.id;

Comentarios desde Facebook:

  1. avatar
    qvixote CHILE Google Chrome Windows
    13 noviembre 2013 at 17:32 #

    Y cómo sería con funciones de tabla?

Responder