Obecnie próbuję wykonać procedura składowana (dwa INSERTS i SELECT) za pośrednictwem PHP. Procedura przechowywana działa (nie są zgłaszane żadne błędy). Wartości są nawet wstawiane do podanych tabel. Przechowujemy wynik w obiekcie JSON, ale zwraca on pustą tablicę. Kiedy wykonujemy procedurę przechowywaną zawierającą tylko SELECT, zwraca poprawne wartości. Wszystkie nazwy zostały zmienione w naszych tabelach (mogliśmy pominąć niektóre, ale nasze przebiegi kodu). Czy ktoś może rzucić światło na to, dlaczego nasza tablica się nie wypełnia?Wstaw i wybierz z zapisanej procedury w PHP
Oto nasza procedura przechowywana
ALTER procedure
As
BEGIN
INSERT INTO TABLE1
(Loan_ID, Doc_ID, Borrower_Name, Docs_Drawn, Funder, First_Payment, Interest_Rate, Loan_Amount)
Select Loan_ID,
(SELECT (COUNT(*)) FROM TABLE WHERE A.Loan_ID = Loan_ID) AS Doc_ID,
Borrower ,[Date_Docs_Drawn]
,[Funder]
,[Payment_Date]
,[Interest_Rate]
,[Loan_Amount] from VIEW A
INSERT INTO TABLE2
(Loan_ID, Submitted_By, Event_Class, Event_Type, Event_Date, Doc_ID)
SELECT A.[Loan_ID],
'Program' AS Submitted_By
,'Collateral' AS Event_Class
, 'Outstanding' AS Event_Type
, CURRENT_TIMESTAMP AS Event_Date
, Doc_ID
FROM TABLE1 AS A
WHERE NOT (A.Loan_ID = ANY (SELECT Loan_ID FROM TABLE2))
SELECT [Loan_ID],[Doc_ID],[Borrower_Name]
,[Funder]
,[Docs_Drawn]
,[First_Payment]
,[Loan_Amount]
,[Interest_Rate]
FROM TABLE1
WHERE Loan_ID <> ALL
(SELECT Loan_ID FROM TABLE2
WHERE Event_Type <> 'Outstanding')
ORDER BY Funder
END
tutaj jest szorstka szkic naszej PHP
$query = "exec storedProcedure";
$result=sqlsrv_query($conn, $query);
$table = array();
while($row = sqlsrv_fetch_array($result)) {
$table[] = $row;
}
echo json_encode($table);
Miło dzięki AToya! Zadziałało! Zrobiłem kilka badań na temat SET NOCOUNT i wygląda na to, że powszechną praktyką jest ustawianie NOCOUNT ON we wszystkich procedurach przechowywanych, aby uniknąć takich błędów = D. Ten post był bardzo pomocny. http://stackoverflow.com/questions/1483732/set-nocount-on-usage –