我无法从我的SQL Server (MSSQL 2012) SP返回到PHP的OUTPUT参数。我的存储过程是:
CREATE PROCEDURE spGetNextSeqID @ID AS INT OUTPUT
AS
BEGIN
BEGIN TRANSACTION
SELECT @ID = SEQUENCE_NO + 1 FROM tblCSRSequence WITH (TABLOCKX)
UPDATE tblCSRSequence SET SEQUENCE_NO=@ID
COMMIT TRANSACTION
END
我的PHP代码是:-
<?php
include "DBConnect.php";
$conn = sqlsrv_connect( $serverName, $connection);
if( !$conn )
{
echo "Connection could not be established to ".$serverName;
die( print_r( sqlsrv_errors(), true));
}
$sql="{call dbo.spGetNextSeqID( ? )}";
$outSeq=0;
$params = array
(
array($outSeq, SQLSRV_PARAM_OUT)
);
$stmt = sqlsrv_query( $conn, $sql, $params );
if( $stmt == false)
die( print_r( sqlsrv_errors(), true) );
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn );
echo $outseq;
?>
我知道 SP正在被调用并工作-我用跟踪检查了它,可以看到它正在生成以下内容:-
declare @p1 varchar(max)
set @p1='154'
exec dbo.spGetNextSeqID @p1 output
select @p1
每次刷新浏览器页面时,它都会调用SP并将计数器加1,但从不将值返回给调用的PHP函数。我已经摆弄这个大约2天了,我已经搜索了类似的帖子,但没有一个建议的修复(如SET NOCOUNT ON等)工作。
有人有什么想法吗?
New:
我错过了您使用单个参数作为输入和输出。
array($outSeq, SQLSRV_PARAM_INOUT)
使用 然后
sqlsrv_next_result($stmt);
echo $outSeq;
参考:http://technet.microsoft.com/en-us/library/cc644932 (v = sql.105) . aspx
旧:
您必须用适当的数据类型设置$outSeq。尝试将值初始化为$outSeq = 0.00,因为您的输出类型是MONEY。
请参考以下文章:
http://technet.microsoft.com/en-us/library/cc626303 (v = sql.105) . aspx