SQLSRV y selecciones múltiples en el procedimiento almacenado
Tengo un procedimiento almacenado que crea una tabla temporal (#test), la llena con datos de otra tabla, ejecuta 3 selecciones en esta tabla temporal y la suelta.
La tabla original tiene más de 20 GB de tamaño y las 3 declaraciones SELECT contienen muchas condiciones diferentes en el SP original.
Estoy ejecutando el SP desde PHP usando SQLSRV, sin embargo, solo puedo administrar para recuperar los 2 primeros conjuntos de resultados.
Si ejecuto el SP desde MSSMS, funcionará bien y devolverá los 3 conjuntos de resultados como se esperaba. Pero desde PHP solo devolverá 2 (probó cada combinación).
No estoy seguro si esto es un problema con el controlador, sqlsrv_fetch_array o sqlsrv_next_result.
Ejemplo de SP (las declaraciones de selección son demasiado grandes, así que las reanudaré):
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
Ahora desde PHP este es mi código de prueba:
$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
Sin embargo, si intento esto funciona:
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
Lo mismo con esta combinación:
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
¿Estoy haciendo algo mal aquí? O hay una manera de obtener los 3 conjuntos de resultados de un solo SP.
Gracias por adelantado.