stored procedure MS SQL, возвращающая выборку
От: Kostt  
Дата: 28.12.05 04:38
Оценка:
Здравствуйте!
Возникла такая проблема:необходимо вызвать из кода программы хранимую процедуру и использовать возвращаемую ей выборку. Собственно процедура:
CREATE PROCEDURE [dbo].[CloneItem]
@OldItemID int
AS
BEGIN
INSERT INTO Items (GroupID, Name)
SELECT GroupID, 'Копия '+[Name]
FROM Items
WHERE Items.[ID] = @OldItemID
SELECT @@Identity as 'ID'
END

Вызываю изнутри в SQL Server EnterPrise процедура работает корректно, все возвращает, но при вызове из кода


m_pCommand->CommandType = adCmdStoredProc;
m_pCommand->CommandText = _bstr_t( "getBlockFilesID" );

_variant_t vt;
vt.vt = VT_I4;
vt.lVal = GroupID;
pParamGroupID = m_pCommand->CreateParameter( _bstr_t("ParamGroupID"), adBigInt/*adInteger*/, adParamInput,sizeof(long), vt);
m_pCommand->Parameters->Append( pParamGroupID );

m_pRecordset->State;

HRESULT hr = m_pRecordset->Open ((IDispatch *) m_pCommand, vtMissing, adOpenForwardOnly,
adLockReadOnly, adCmdStoredProc);

m_pRecordset->State;

m_pRecordset пуст!
Подскажите, в чем дело, плиз
Re: stored procedure MS SQL, возвращающая выборку
От: Docker Канада  
Дата: 28.12.05 06:50
Оценка:
Здравствуйте, Kostt, Вы писали:

K>Здравствуйте!

K>Возникла такая проблема:необходимо вызвать из кода программы хранимую процедуру и использовать возвращаемую ей выборку.
...
K>m_pRecordset пуст!
K>Подскажите, в чем дело, плиз

Мда... Поставте в начале процедуры SET NOCOUNT ON т.е.
CREATE PROCEDURE [dbo].[CloneItem] 
@OldItemID int
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Items (GroupID, Name)


...
Re[2]: stored procedure MS SQL, возвращающая выборку
От: Аноним  
Дата: 28.12.05 07:40
Оценка:
Спасибо, заработало
Re: stored procedure MS SQL, возвращающая выборку
От: pkarklin  
Дата: 28.12.05 07:48
Оценка:
Здравствуйте, Kostt, Вы писали:

K>Здравствуйте!

K>Возникла такая проблема:необходимо вызвать из кода программы хранимую процедуру и использовать возвращаемую ей выборку. Собственно процедура:

Про SET NOCOUNT ON уже сказали. Добавлю свои 5 копеек:

1. Используйте SCOPE_IDENTITY() вместо @@identity.
2. Возвращайте значение через выходной параметр.
Re[2]: stored procedure MS SQL, возвращающая выборку
От: Митяй Россия http://dkomanov.livejournal.com
Дата: 29.12.05 00:22
Оценка:
P>2. Возвращайте значение через выходной параметр.
Кстати, а почему бы не через ReturnParameter?
Re[3]: stored procedure MS SQL, возвращающая выборку
От: Docker Канада  
Дата: 29.12.05 05:24
Оценка: +1
Здравствуйте, Митяй, Вы писали:

P>>2. Возвращайте значение через выходной параметр.

М>Кстати, а почему бы не через ReturnParameter?

В общем случае, когда возвращаемых значений больше одного, это не подходит. Кроме того, с output параметром будет проще, если вдруг понадобиться возвращать еще одно значение. Так что для простоты и единообразия кода IMHO лучше использовать output parameters.
Re[4]: stored procedure MS SQL, возвращающая выборку
От: Митяй Россия http://dkomanov.livejournal.com
Дата: 29.12.05 15:54
Оценка:
D>В общем случае, когда возвращаемых значений больше одного, это не подходит. Кроме того, с output параметром будет проще, если вдруг понадобиться возвращать еще одно значение. Так что для простоты и единообразия кода IMHO лучше использовать output parameters.
Интересно, а разница в производительности, есть какая-либо?

В общем-то согласен, но делаю в основном return parameter, т.к. обычно более одного инта из процедуры ничего не надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.