2013-07-10 5 views
6

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); 

Odpowiedz

2

Spróbuj użyć SET NOCOUNT ON w procedurze przechowywanej. Prawdopodobnie jesteś ograniczony przez wyniki zwrócone do PHP ze sterownika SQL Server PHP, więc nie otrzymujesz danych z instrukcji SELECT.

+0

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 –