我有一个存储过程,它创建一个临时表(#test),用另一个表中的数据填充它,在这个临时表上运行 3 个选择并删除它。
原始表超过 20 GB,3 个 SELECT 语句在原始 SP 上包含许多不同的条件。
我正在使用 SQLSRV 从 PHP 执行 SP,但是我只能设法检索 2 个第一个结果集。
如果我从 MSSMS 运行 SP,它将运行良好并按预期返回 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
我在这里做错了吗?或者有没有办法从单个 SP 中获取 3 个结果集。
提前致谢。