Heute fragte mich ein Kollege, wie man in einer Prozedur die Ergebnisse aus einer anderen Prozedur "auffangen" kann. Das geht mit maximal einem ResultSet. Wenn die Prozedur mehrere liefert, dann geht es nicht.

Man benötigt dazu eine Table-Variable oder eine (temporäre) Tabelle. In folgenden Beispiel wird das Ergebnis der Prozedur "sp_who" aufgefangen:

create table #temp(
id integer identity(1,1) not null primary key,
spid integer not null,
ecid smallint not null,
status nvarchar(100) not null,
loginame sysname not null,
hostname sysname not null,
blk smallint not null,
dbname sysname null,
cmd nvarchar(2000) null,
request_id integer not null)

insert into #temp (spid, ecid, status, loginame, hostname,blk, dbname, cmd, request_id)
exec sp_who

select spid, ecid, status, loginame, hostname,blk, dbname, cmd, request_id
from #temp

drop table #temp

So richtig schnell ist das allerdings nicht. Deswegen sollte man sich überlegen, lieber eine "table-valued function" einzusetzen. Das geht freilich nur, wenn in der Funktion keine Daten geändert werden.