2016-02-27 68 views
1

我已經在SQL Server 2012中編寫了一個相當複雜的存儲過程,我知道在執行時多次選擇「1」。當我在SQL Management Studio中運行它時,它會執行並正確更新我的表的行。然而,當我使用下面的代碼從PHP調用它,它不執行:複雜的存儲過程在sqlsrv_execute調用時不會執行

declare @p1 int 
set @p1=NULL 
exec sp_prepexec @p1 output,N'@P1 int,@P2 int',N'exec UpdateBudgetToMatchTransactions @[email protected], @[email protected]',2,2016 
select @p1 
go 

然而,行不受影響:

$Month = 2; 
$Year = 2016; 
$connectionInfo = array("Database"=>"Finances", "UID"=>"sa", "PWD"=>"abcd1234"); 
$connection = sqlsrv_connect("localhost", $connectionInfo); 
if($connection === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 
$stmt = sqlsrv_prepare($connection, "exec UpdateBudgetToMatchTransactions @Month=?, @Year=?", array(&$Month, &$Year)); 
if (sqlsrv_execute($stmt) === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

SQL事件探查說是發生在服務器上的以下就像我直接調用存儲過程一樣。此外,如果我在SQL Management Studio中完全執行該SQL塊並將其全部執行,那麼這些行會改變我期望它們的方式。

我很感謝任何幫助確定我做錯了什麼。

回答

0

我的主存儲過程不包含已經在子過程中的一行。我也在主存儲過程中添加了這一行,現在這種行爲非常好。

看看在程序開始時加入「SET NOCOUNT ON」並試一試!