SQL 服务器未从存储过程返回值

SQL Server not returning a value from stored procedure

我尝试使用 PHP 连接到 SQL 服务器来调用其中的过程。但是没有结果return回来。请给我一些建议。

示例存储过程:

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

结果为空,没有错误。 我希望 return 值为 1,-2 或 -3

提前致谢。

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

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

对于您正在做的事情,return 专栏可能更容易。例如,您可以将 RETURN -2 更改为 SELECT -2 as return_status 并将 return 值更改为结果集中的 return_status 列。