我在SQL Server 2012中编写了一个相当复杂的存储过程,我知道在执行时多次选择“1”。当我在SQL Management Studio中运行它时,它会执行并且我的表的行正确更新。但是,当我使用下面的代码从PHP调用它时,它没有执行:
$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事件探查器说服务器上发生了以下情况:
declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 int,@P2 int',N'exec UpdateBudgetToMatchTransactions @Month=@P1, @Year=@P2',2,2016
select @p1
go
但是,当我直接调用存储过程时,行不会受到影响。此外,如果我采用SQL块并在SQL Management Studio中完整地执行它,那么行会改变我对它的期望。
我非常感谢你帮助我确定我做错了什么。
答案 0 :(得分:0)
我的主存储过程不包含已在子过程中的一行。我已经在主存储过程中添加了这一行,现在这种行为非常好。
看一下在程序开始时添加“SET NOCOUNT ON”并尝试一下!!