我希望能够使用 PHP 和 sqlsrv 从存储过程执行中检索结果集,并同时让两个结果集可供读取。这可能吗 ?
这里有一个可以做的示例,但没有同时提供 2 个结果集:
$connectionInfo = array("Database"=> 'myDatabase', "UID"=> 'myUser', "PWD" => "MyPassword", 'MultipleActiveResultSets' => true);
$conn = sqlsrv_connect("myServer", $connectionInfo);
$sql = "EXEC dbo.MyStoredProc;"; // Retrieves 2 result sets
$stmt = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
sqlsrv_next_result($stmt);
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
// Now I cannot fetch from first result set because I called sqlsrv_next_result and cannot go back
启用 MARS 后,我知道我可以有 2 个活动结果集(但我需要两个语句,并且我需要对两个不同的 SP 或同一个 SP 进行两次查询并跳过第一个结果,但这不是有效的),如下所示:
$connectionInfo = array("Database"=> 'myDatabase', "UID"=> 'myUser', "PWD"=> "MyPassword", 'MultipleActiveResultSets' => true);
$conn = sqlsrv_connect("myServer", $connectionInfo);
$sql = "EXEC dbo.MyOtherStoredProc;"; // Retrieve a single resultset
$stmt = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
$sql = "EXEC dbo.YetAnOtherStoredProc;"; // Retrieve a single resultset
$stmt2 = sqlsrv_query($conn, $sql);
$row2 = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_ASSOC);
// Now I can fetch an other row from first statement on the same connection (which is not possible if MARS is not enabled)
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
由于结果非常繁重,我无法一次读取整个结果然后调用sqlsrv_next_result
这就是为什么我希望同时读取两个结果的原因。