数据库
首页 > 数据库> > php – SQLSRV和存储过程中的多个选择

php – SQLSRV和存储过程中的多个选择

作者:互联网

我有一个存储过程,它创建一个临时表(#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个结果集.

提前致谢.

解决方法:

我实际上只是遇到了类似的问题,并设法让以下工作:

$result = array();

// Get return value
do {
   while ($row = sqlsrv_fetch_array($query)) {
       // Loop through each result set and add to result array
       $result[] = $row;
   }
} while (sqlsrv_next_result($query));

print_r($result);

do-while循环将在所有结果中前进(而不是必须手动执行).
似乎循环遍历sqlsrv_fetch_array()是必不可少的,所以我认为这是真正的答案.

标签:sqlsrv,php,sql-server,stored-procedures
来源: https://codeday.me/bug/20190725/1532894.html