首页 > 解决方案 > SQL Server 未从存储过程返回值

问题描述

我尝试使用 PHP 连接到 SQL Server 在其中调用一个过程。但是没有结果返回。请给我一些建议。

示例存储过程:

ALTER  PROCEDURE [MemberJoin]
    @username varchar(25),
    @password varchar(50),
AS
If (EXISTS(SELECT username FROM tbl_user WHERE username = @username ))
    Begin
        RETURN -2
    End
BEGIN TRANSACTION
BEGIN
   INSERT INTO tbl_user (username , password ) VALUES (@username, @password)
    If (@@ERROR <> 0 OR @@ROWCOUNT = 0)
    Begin
        ROLLBACK TRANSACTION
        RETURN -3
    End
COMMIT TRANSACTION
END

RETURN 1

PHP 代码

$return = null;

$server = "LOCALHOST\\SQLEXPRESS";
$connectionInfo = array( "Database"=>"SHOP", "UID"=>"sa", "PWD"=>"");
$Conn = sqlsrv_connect( $server, $connectionInfo);

$sql = "{call ? = MemberJoin(@username=?,@password=?)}";

$param = [
    [&$return, SQLSRV_PARAM_OUT],
    ['testingsr', SQLSRV_PARAM_IN],
    ['12345667', SQLSRV_PARAM_IN],
];

$stmt = sqlsrv_query ( $Conn , $sql, $param );

echo($return);

结果 null 没有错误。我希望返回值为 1、-2 或 -3

先感谢您。

标签: phpsql-serversqlsrv

解决方案


您需要声明一个变量来捕获该return值,然后检查该变量的值。下面是一个例子。

DECLARE @return_status int;  
EXEC @return_status = dbo.sproc_checkstate;  
SELECT 'Return Status' = @return_status;

对于您正在做的事情,返回一列可能更容易。例如,您可以将值更改RETURN -2为结果集中的return_statusSELECT -2 as return_status并将其返回。


推荐阅读