2014-03-06 17 views
0

我试图与输出SQL服务器+ PHP - 存储过程与多个SELECT返回垃圾输出

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

创建一个SQL Server存储过程
$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; 

当我回应结果时,它将返回垃圾文本而不是'你好,安迪'。我意识到我不能放2个以上的select语句,如果我删除了第一个select,那么输出就OK了。但我需要一些逻辑的选择语句。

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语句?

+0

试加';'在你选择查询之间:'SELECT * FROM Company WHERE COM_ID = 1; SELECT out_var ='Hello,'+ in_var'或者你想在一个查询中获得两个变量? – Viscocent

+0

添加';'似乎没有帮助:( – navilink

回答

0

为什么你不尝试使用另一个变量只是为了控制?根据值,您返回一个选择或另一个。事情是这样的:

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

+0

让我们只是说我需要两个SELECT在一起,没有其他的方式。 – navilink

+0

你应该看到这个:http://php.net/mssql_next_result – fnightangel

0

也许你想要得到他们两人在一个查询?: 好,如果你愿意,你可以这样做:

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