SQLSRV und mehrere auswählt, die in der Gespeicherten Prozedur
Ich habe eine Gespeicherte Procedured, die erstellt eine temporäre Tabelle (#test), füllt es mit Daten aus einer anderen Tabelle, läuft 3 wählt auf diese zeitliche Tisch und lässt es.
Der ursprünglichen Tabelle, es ist über 20 GB groß und die 3 SELECT-Anweisungen enthalten, die eine Menge von verschiedenen Bedingungen auf die original SP.
Ich bin der Ausführung der SP von PHP mit SQLSRV kann ich jedoch nur zu verwalten, abzurufen, die für die ersten 2 Ergebnis Sätze.
Wenn ich den SP von MSSMS läuft es ganz gut und gibt den 3 resultsets als erwartet. Aber von PHP wird es gerade wieder 2 (versuchte jede Kombination).
Nicht sicher, ob dies ein problem mit dem Treiber, sqlsrv_fetch_array oder sqlsrv_next_result.
Beispiel der SP (die select-Anweisungen sind zu groß, also werde ich einfach fortsetzen, Sie):
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
Nun von PHP-das ist mein test-code:
$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 obwohl, wenn ich versuchen, das es funktioniert:
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
Gleiche Sache mit dieser 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 etwas falsch hier? Oder gibt es eine Möglichkeit zum abrufen der 3 resultsets aus einer einzelnen SP.
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich eigentlich nur mit einem ähnlichen Problem und haben es geschafft die folgenden arbeiten:
Die do-while-Schleife wird Durchlaufen, alle Ergebnisse (anstatt das manuell zu machen).
Es scheint, dass die Schleife durch sqlsrv_fetch_array() ist wichtig, so denke ich, ist die richtige Antwort.