Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Использование курсора в запросе (число прочтений - 1496 )
LostLamer
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 7
Зарегистрирован: 06. Апреля 2007
Использование курсора в запросе
17. Апреля 2008 :: 09:36
Печать  
DECLARE @MyTableVar table(
descr VarChar(150),ID Char(9));
DECLARE tables_cursor CURSOR
FOR Select  descr,ID From $Справочник.Контрагенты
OPEN tables_cursor;
DECLARE @descr VarChar(150);
DECLARE @ID Char(9);
FETCH NEXT FROM tables_cursor INTO @descr,@ID
WHILE (@@FETCH_STATUS <> -1)
BEGIN;      
Куча Условий
     INSERT INTO @MyTableVar (descr,ID)
     VALUES (@descr,@ID)
END;
FETCH NEXT FROM tables_cursor INTO @descr,@ID,@ParentID;
END;
CLOSE tables_cursor;
DEALLOCATE tables_cursor;
Select ID [ID $Справочник.Контрагенты] From @MyTableVar  

Это примерный текст запроса который выполняется на чистом SQL без всяких проблем так в чем же дело
если выполнять его  с помощью  ODBCRecordset
результатом должна быть таблица, а возвращает 1

Где ошибка или у меня недопонимание класса ODBCRecordset ???

Может нужно использовать ADO в этом случае ???

Возможен вариант с функцией и обычным  SELECTом ,  но  я не знаю как ведет себя SQL если создаеш процедуру потом ее убиваеш для одного пользователя нормально, а если работать будут 100 ?? надо ли генерить название процедуры для каждого отдельного юзера



  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Использование курсора в запросе
Ответ #1 - 17. Апреля 2008 :: 09:46
Печать  
ODBCRecordSet возвращает результат выполнения первой инструкции а не последней, это особенность работы ODBC драйвера где то здесь это уже обсуждалось
  
Наверх
ICQ  
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Использование курсора в запросе
Ответ #2 - 17. Апреля 2008 :: 10:04
Печать  
Set NoCount On в начале запроса имеется?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Использование курсора в запросе
Ответ #3 - 17. Апреля 2008 :: 12:52
Печать  
sadovnikov прав, в начало запроса надо поставить Set NoCount On
Для того чтобы состояние контекста не изменять, в конец запроса надо поставить Set NoCount Off
Ты просто получаешь результат первой выполненной инструкции, по элгоритму это первый же INSERT.

Цитата:
ODBCRecordSet возвращает результат выполнения первой инструкции а не последней, это особенность работы ODBC драйвера где то здесь это уже обсуждалось

Это особенность реализации ODBCRecordSet, а не драйвера.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать