M$. Получить retval и recordset из хранимой процедуры

Найч

Алгоритмик :-)
M$. Получить retval и recordset из хранимой процедуры

Здравствуйте!
Пытаюсь найти ответ на простой вопрос - необходимо после вызова хранимой процедуры вытащить результаты из ее тела (select'ы) и обработать значение, возвращаемое через return. Что мною было опробировано.
В процедуре:
[sql]
select * from books;
RETURN -111
[/sql]
при этом таблица books не пустая
1.
PHP:
$query="EXECUTE Proc";
.......................................
$res=mssql_query($query) or die ("Error executing Proc!");
И тогда в $res мы получаем набор рекордсетов из процедуры, по которым перемещаемся через mssql_next_result. Но возвращаемого значения среди них найти мне не удалось.
2.
PHP:
$retval="";
$proc=mssql_init("Proc"); 
mssql_bind($proc,"RETVAL",&$retval,SQLINT4);
$res=mssql_execute($proc) or die ("Error executing Proc!");
в переменной $retval возвращаемое значение, но mssql_execute всегда (при удачном выполнении процедуры) возвращает 1. Не понятно, как достать результат выборки. На www.php.net в комментариях к этим функциям народ разбирает их через mssql_fetch_x, но мне не удалось заставить mssql_execute вернуть в $res что-то, кроме 1.
@@ERROR стабильно 0, процедура отрабатывает нормально.
Чего я не учел? Или, если сформулировать иначе, коим образом можно из хранимой процедуры получить рузельтаты select'ов и значение return'а?
ЗЫ. Поиск по форуму к результатам не привел, два дня поиска в Google тоже.
Забыл добавить - можно возвращаемое значение передавать через OUTPUT переменную, но это заплатка.
Зараннее спасибо
 

Yukko

Новичок
Забыл добавить - можно возвращаемое значение передавать через OUTPUT переменную
читать онлайн мануал к mssql в enterprise manager нажать f1, там ясно написано, что output - способ возврата результатов из ХП, и никакая это не заплатка.
 

Найч

Алгоритмик :-)
читать онлайн мануал к mssql в enterprise manager нажать f1, там ясно написано, что output - способ возврата результатов из ХП, и никакая это не заплатка.
Вероятно, вы не так поняли мои слова. Возвращаемое значение - return X, а то, на что вы обратили внимание, - возврат значений в параметре. Если вам что-то непонятно в вопросе, уточните. Я постарался изложить максимально понятно. Во избежание недоразумений, покажу на примере.
Неправильно:

declare @retval int =0 OUTPUT;
begin
if (...) begin
@retval=-111;
end
else begin
[some code];
end
[more code];
if @@ERROR<>0 @retval=-111
else @retval=0;
end
=========================
Правильно
begin
if (...) return -111;
[some code];
[more code];
if @@ERROR<>0 return -111
else return 0;
end
 

Найч

Алгоритмик :-)
Компутер пыва хотел (с) Линк.
Извините за отнятое время. Mssql_execute с сегодняшнего дня возвращает recordset. M$ :(
 

Prince

Новичок
Есть проблема:
выполняеться пхп код - <?php
$query_string= "INSERT INTO dbo.news (news_creat_date, news_htm, Num_of_phots, Ph_ids) VALUES (1240, '41651 новость дня сегодня - праздник 23 февраля', NULL, NULL)";
$ms_connect = mssql_connect($host:port, $uname,$pass)or die("Не могу коннектиться к базе!!!!");
mssql_select_db('sms_db',$ms_connect) or die("Не могу выбрать БД!!!");
$data = mssql_query($query_string,$ms_connect)or die("<br>Ошибка сервера<br>".mssql_get_last_message());
mssql_close($ms_connect);
echo ("<br>".mssql_get_last_message());
?>

на выходе получаю "Changed database context to 'sms_db'" и всё. в базе строка необновляеться и не добавляеться...

в консоли ентерпрайз менеджера сам SQL-код работает полноценно (проверил 23 раза)

конфигурация такая 1 машина php+apache+freeDTS
2 машина win2000+mssql 2000
клиентскую машину я думаю указывать необязательно :)
 
Сверху