【问题标题】:SQL Server + PHP - stored procedure with multiple SELECT returns garbage outputSQL Server + PHP - 具有多个 SELECT 的存储过程返回垃圾输出
【发布时间】:2014-03-06 04:05:09
【问题描述】:

我正在尝试创建一个带有输出的 SQL Server 存储过程

SQL 服务器

CREATE PROCEDURE sp_test1
   @in_var  VARCHAR(20),
   @out_var VARCHAR(50) OUTPUT
AS
BEGIN
    SELECT * FROM Company WHERE COM_ID=1
    SELECT @out_var = 'Hello, ' + @in_var
END

PHP

$result = "";
$sql = "{CALL sp_test1(?,?)}";
$param = array(
    array("Andy",SQLSRV_PARAM_IN),
    array($result, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR(50))
);
$stmt = sqlsrv_query($conn, $sql, $param);
echo $result;

当我回显结果时,它返回垃圾文本而不是 'Hello, Andy'。我意识到我不能放置超过 2 个选择语句,如果我删除了第一个选择,那么输出就可以了。但我需要一些逻辑的 select 语句。

    SELECT * FROM Company WHERE COM_ID=1 -- will be used in logic later
    SELECT @out_var = 'Hello, ' + @in_var -- i just want to output this!

那么如何强制只输出 LAST SELECT 语句?

【问题讨论】:

  • 尝试添加';'在您选择查询之间:'SELECT * FROM Company WHERE COM_ID=1;SELECT out_var = 'Hello, ' + in_var' 或者您想在一个查询中同时获取两个变量?
  • 添加了';'似乎没有帮助:(

标签: php sql-server stored-procedures output multiple-select


【解决方案1】:

您为什么不尝试使用另一个变量来进行控制?根据值,您返回一个选择或另一个。像这样的:

CREATE PROCEDURE sp_test1
    @option  INT,
    @in_var  VARCHAR(20),
    @out_var VARCHAR(50) OUTPUT
AS
BEGIN
   IF @option = 0
       SELECT * FROM Company WHERE COM_ID=1
   ELSE
       SELECT @out_var = 'Hello, ' + @in_var
END

所以在这种情况下,您像 @option = 1 一样传递,过程返回 "Hello"。当您的逻辑需要另一个时,您调用该过程并传递@option = 0

【讨论】:

  • 假设我需要两个 SELECT 一起,别无他法。
【解决方案2】:

也许您想在一个查询中同时获取它们?: 好吧,如果你愿意,你可以这样做:

SELECT *, @out_var = 'Hello, ' + @in_var FROM Company WHERE COM_ID=1 

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2023-03-31
    • 2010-11-23
    • 2017-02-22
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多