Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment saisir plusieurs sorties d'une procédure stockée dans une table temporaire

Vous ne pouvez pas, pas sans modifier la procédure stockée.

Dans SQL Server, vous ne pouvez insérer que le premier jeu de résultats d'une procédure stockée dans une autre table, via INSERT...EXEC . Le nombre et les positions des colonnes doivent correspondre exactement, et INSERT...EXEC ne peut pas être imbriqué, c'est-à-dire que vous ne pouvez pas insérer de proc1 dans une table de proc2, puis insérer de proc2 dans une table de proc3. Donc INSERT...EXEC est une solution tout à fait insatisfaisante.

La solution consiste à modifier la procédure pour insérer les résultats dans des tables temporaires définies dans la portée d'appel, par exemple :

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 vous ne pouvez pas modifier la procédure, vous n'avez pas de chance. CORRECTION  :comme HABO l'a gentiment souligné, vous pourriez utilisez le CLR pour itérer les jeux de résultats. Voir le lien ci-dessous pour plus de détails. Pas trop mal si vous savez ce que vous faites et que vous n'avez pas d'autre choix.

Pour plus de détails sur le partage de données entre procédures stockées, consultez cet article très complet d'Erland Sommarskog :http:// www.sommarskog.se/share_data.html