我有一個存儲過程,它創建一個臨時表(#test),用另一個表中的數據填充它,在此臨時表上運行3個選擇並刪除它。存儲過程中的SQLSRV和多個選擇
原始表超過20 GB大,3個SELECT語句在原始SP上包含很多不同的條件。
我使用SQLSRV從PHP執行SP,但是我只能設法檢索2個第一個結果集。
如果我從MSSMS運行SP,它將運行得很好,並按預期返回3個結果集。但是從PHP它只會返回2(嘗試每個組合)。
不知道這是否是驅動程序sqlsrv_fetch_array或sqlsrv_next_result的問題。 SP的
的例子(select語句太大所以我就恢復它們):
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個結果集。
在此先感謝。
謝謝!解決了我的問題。掙扎了好幾個小時 – KiKMak