У меня есть хранимый процесс, который создает временную таблицу (#test), заполняет ее данными из другой таблицы, запускает 3 выборки в этой временной таблице и опускает ее.SQLSRV и несколько выборок в хранимой процедуре
Оригинальная таблица размером более 20 ГБ и 3 оператора SELECT содержат множество различных условий для исходного SP.
Я выполняю SP из PHP с использованием SQLSRV, однако мне удается получить только два первых набора результатов.
Если я запустил 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.
Заранее спасибо.
Thanks! Решила мою проблему. боролся часами – KiKMak