SQLSRV и множественный выбор в хранимой процедуре
У меня есть хранимая процедура, которая создает временную таблицу (#test), заполняет ее данными из другой таблицы, запускает 3 выбора для этой временной таблицы и удаляет ее.
Исходная таблица имеет размер более 20 ГБ, а 3 оператора SELECT содержат множество различных условий для исходного SP.
Я выполняю SP из PHP, используя SQLSRV, но мне удается только получить 2 первых набора результатов.
Если я запускаю SP из MSSMS, он будет работать нормально и вернет 3 набора результатов, как и ожидалось. Но из PHP он просто вернет 2 (пробовал каждую комбинацию).
Не уверен, что это проблема с драйвером, sqlsrv_fetch_array или sqlsrv_next_result.
Пример SP (операторы выбора слишком велики, поэтому я просто возобновлю их):
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
Теперь из PHP это мой тестовый код:
$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
Однако, хотя, если я попробую это, это работает:
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
То же самое с этой комбинацией:
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
Я что-то здесь не так делаю? Или есть способ получить 3 набора результатов из одного SP.
Заранее спасибо.