sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo tomo múltiples salidas de un procedimiento almacenado en la tabla temporal?

No puede, no sin modificar el procedimiento almacenado.

En SQL Server, solo puede insertar el primer conjunto de resultados de un procedimiento almacenado en otra tabla, a través de INSERT...EXEC . El número de columnas y las posiciones deben coincidir exactamente, y INSERT...EXEC no se puede anidar, es decir, no puede insertar desde proc1 en una tabla en proc2 y luego insertar desde proc2 en una tabla en proc3. Así que INSERT...EXEC es una solución totalmente insatisfactoria.

La solución es modificar el procedimiento para insertar resultados en tablas temporales definidas en el alcance de la llamada, por ejemplo:

create proc get_some_data as
insert #temp1 (col1, col2) select col1, col2 from table1
insert #temp2 (colA, colB) select colA, colB from table2
go
create table #temp1 (col1 int, col2 int)
create table #temp2 (colA int, colB int)
exec get_some_data
select * from #temp1
select * from #temp2
drop table #temp1
drop table #temp2
go

Si no puede modificar el procedimiento, no tiene suerte. CORRECCIÓN :como señaló amablemente HABO, usted podría use el CLR para iterar los conjuntos de resultados. Vea el enlace a continuación para más detalles. No está mal si sabes lo que estás haciendo y no tienes otra opción.

Para obtener más detalles sobre cómo compartir datos entre procedimientos almacenados, consulte este artículo muy completo de Erland Sommarskog:http:// www.sommarskog.se/share_data.html