SQL Server + PHP - хранимая процедура с несколькими SELECT возвращает вывод мусора

Я пытаюсь создать хранимую процедуру 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' возвращается мусорный текст. Я понимаю, что не могу поместить более двух операторов выбора, если я удалил первый выбор, результат будет в порядке. Но мне нужен оператор 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!

Итак, как я могу заставить выводить только ПОСЛЕДНИЙ оператор SELECT??


person navilink    schedule 06.03.2014    source источник
comment
попробуйте добавить ';' между выбранными вами запросами: 'SELECT * FROM Company WHERE COM_ID=1;SELECT out_var = 'Hello, ' + in_var' или, может быть, вы хотите получить обе переменные в одном запросе?   -  person Viscocent    schedule 06.03.2014
comment
Добавлен ';' вроде не помогает :(   -  person navilink    schedule 07.03.2014


Ответы (2)


Почему бы вам не попробовать использовать другую переменную только для контроля? В зависимости от значения вы возвращаете тот или иной выбор. Что-то вроде этого:

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

person fnightangel    schedule 06.03.2014
comment
Скажем так, мне нужны оба SELECT вместе, никак иначе. - person navilink; 07.03.2014

Может быть, вы хотите получить их обоих по одному запросу? Ну, если вы хотите, вы можете сделать это:

SELECT *, @out_var = 'Hello, ' + @in_var FROM Company WHERE COM_ID=1 
person Viscocent    schedule 10.03.2014