Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
sergey_rft
Member

Откуда: Томск.
Сообщений: 282
Здравствуйте, у меня следующий вопрос: как из хранимой процедуры можно вернуть значение, но не в хранимую процедуру, а в клиентское приложение. Я имею в виду не набор данных, не выборку, а значение. Например я вставляю запись со значением NewID(), мне это значение надо вернуть приложению.
Эсли это вообще возможно.
31 июл 03, 11:28    [283004]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480

CREATE PROCEDURE CreateNewObject
@NewObjectId int OUTPUT
AS

INSERT INTO Object DEFAULT VALUES
SET @NewObjectId = (SELECT SCOPE_IDENTITY())
GO
31 июл 03, 11:38    [283027]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
sergey_rft
Member

Откуда: Томск.
Сообщений: 282
Berg, так это вернется в приложение или в хранимую процедуру из которой была вызвана вторая хранимая процедура.
31 июл 03, 11:40    [283035]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
значение - это частный слачай выборки (ооо!!!) мысль уловил?

т.е.

declare @v uniqueidentifier
set @v=newid()
insert into ... values(..., @v ...)
...
select @w newid

ну и разумеется не забывать, что клиент может читать много рекордсетов
31 июл 03, 11:40    [283037]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Серг70
Member

Откуда: Москва
Сообщений: 273
У меня клиент на Visual FoxPro. Так туда передать возвращяемое значение нельзя. Я это значение возвращаю в параметре вызова, как показал Berg, только я пишу так
SELECT @NewObjectId = SCOPE_IDENTITY()
31 июл 03, 11:44    [283054]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
sergey_rft
Member

Откуда: Томск.
Сообщений: 282
Серг70, а как его потом оттуда прочитать?
31 июл 03, 11:46    [283063]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Куда хочешь туда и вернет...
Смотря кто клиент...
Например, в C++ Builder при работе через ADO и использовании TADOStoredProc это может выглядеть так:

int retVal = SUCCESS;
Proc->ProcedureName = "Name";
Proc->Parameters->Clear();
try {
Proc->Parameters->CreateParameter("", ftInteger, pdOutput, sizeof(int), FAIL);
Proc->Prepared = true;
Proc->ExecProc();
retVal = Proc->Parameters->Items[0]->Value;
}
catch(...) {
retVal = FAIL;
}
31 июл 03, 11:47    [283069]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
так это вернется в приложение или в хранимую процедуру из которой была вызвана вторая хранимая процедура.

Вернется туда, откуда вызывали. Если из процедуры, то в процедуру, если из приложения, то в приложение.


У меня клиент на Visual FoxPro. Так туда передать возвращяемое значение нельзя.

И с чего вы это взяли, что нельзя ?
31 июл 03, 11:47    [283071]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
sergey_rft
Member

Откуда: Томск.
Сообщений: 282
Berg, а с в VC++, ATL OLE DB не имел дел, как это там будет выглядеть?
31 июл 03, 11:51    [283081]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
Нет, не имел.
В книге Круглинского все очень хорошо по-моему описано (подробно).
Или спроси в форуме по VC++
31 июл 03, 11:55    [283096]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Серг70
Member

Откуда: Москва
Сообщений: 273
А читается значение в Fox-е просто (далее код Fox)
NewObj=0

exec(nCon,'exec CreateNewObject ?@NewObj')
?'Новая запись',NewObj

Переменная NewObj должна иметь 2 и более символов в названии (заморочка Fox)
31 июл 03, 11:59    [283104]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Серг70
Member

Откуда: Москва
Сообщений: 273
2 Glory
Научи, как передать в Fox возвращаемое значение ХП
У меня не получилось ни разу, а перепробовал я тьму вариантов
А еще хорошо бы отлавливать сгенерированное значение в RiseError, тоже не умею. В Delphi делается на раз, а в Fox-е не получается
31 июл 03, 13:29    [283332]     Ответить | Цитировать Сообщить модератору
 Re: как из хранимой процедуры можно вернуть значение клиентскому приложению.  [new]
Glory
Member

Откуда:
Сообщений: 104760
1.
outParam = 0

resultCode = SQLExec(connHand, "{CALL sp_test (2, 4, ?@outParam)}")
? "outParam =", outParam


2. RAISERROR ловиться на результат выполнения SQLExec с последующим вызовом AERROR( ). Для ODBC ошибок номер fox-ой ошибки всегда будет 1526 а вот в массиве из AERROR( ) получишь дополнительные данные об ошибке. При работе через OLE код fox-ой ошибки другой. Подробности смотри в Help-е про AERROR( )
31 июл 03, 13:46    [283393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить