SQLSRV und Mehrfachauswahl in der gespeicherten Prozedur

Ich habe eine gespeicherte Prozedur, die eine temporäre Tabelle (#test) erstellt, sie mit Daten aus einer anderen Tabelle füllt, 3 Auswahlen für diese temporale Tabelle ausführt und sie löscht.

Die ursprüngliche Tabelle ist über 20 GB groß und die 3 SELECT-Anweisungen enthalten viele verschiedene Bedingungen für den ursprünglichen SP.

Ich führe den SP von PHP aus mit SQLSRV aus, kann jedoch nur die ersten beiden Ergebnismengen abrufen.

Wenn ich den SP über MSSMS ausführe, funktioniert er einwandfrei und gibt die 3 Ergebnismengen wie erwartet zurück. Aber von PHP wird nur 2 zurückgegeben (versucht jede Kombination).

Nicht sicher, ob dies ein Problem mit dem Treiber sqlsrv_fetch_array oder sqlsrv_next_result ist.

Beispiel für den SP (die select-Anweisungen sind zu groß, daher setze ich sie einfach fort):

CREATE PROCEDURE sp_transfers
@dt date,
@campaign varchar(16)
AS
BEGIN
CREATE TABLE #test ( [column definitions...] )

BEGIN
INSERT INTO #test SELECT * FROM sometable WHERE dt = @dt AND campaign = @campaign

SELECT * FROM #test ...
SELECT * FROM #test ...
SELECT * FROM #test ...

DROP TABLE #test
END

Von PHP aus ist dies mein Testcode:

$q = sqlsrv_query($conn,"EXEC sp_transfers @dt='2013-10-01',@campaign='1234'");

sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 1st resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 2nd resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // EMPTY

Aber wenn ich das versuche, funktioniert es:

sqlsrv_next_result($q);
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 2nd resultset
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // OK - 3rd resultset shows up

Gleiches gilt für diese Kombination:

sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); //OK - data as expected - 1st resultset
sqlsrv_next_result($q);
sqlsrv_next_result($q);
var_dump(sqlsrv_fetch_array($q)); // OK - 3rd resultset shows up

Mache ich hier etwas falsch? Oder gibt es eine Möglichkeit, die 3 Resultsets von einem einzelnen SP abzurufen.

Danke im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage