Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
01.03.2001, 14:20
|
|||
---|---|---|---|
|
|||
Простой вопрос про 2 курсора |
|||
#18+
Итак, есть 2 таблицы - table1 и table2, связанные как 1:N по ключу id_table1 (ну и есть какая-то переменная @var1 int) описываем 2 курсора: declare cursor1 for select ... from table 1 declare cursor 2 select ... from table2 where table2.id_table1=@var1 Теперь open cursor1 while (покуда не кончится 1-ый курсор) begin fetch cursor1 into ... select @var1=@@identity open cursor 2 /* т.е. там у нас по идее должны быть записи, относящиеся к 1-ой строке 1-го курсора*/ while (теперь покуда 2-ой не кончится ) begin fetch cursor2 into ... end close cursor 2 end close cursor 1 deallocate cursor 2 deallocate cursor 1 вот так вот просто. Только вот fetch 2-го курсора упорно выдает NULL. Хоть тресни! ГОРЕ ПРОСТО!!! При этом select из тела 2-го курсора на месте этого самого fetch выполняется легко и охотно!... Я пробовал декларировать курсор (и deallocate соответственно) внутри внешнего цикла - непосредственно перед open cursor2. Работает!!!... Но ведь это нерационально! Дурь какая-то… Если кто поможет – буду просто счастлив ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.03.2001, 14:43
|
|||
---|---|---|---|
|
|||
Простой вопрос про 2 курсора |
|||
#18+
Опиши cursir2 как SCROLL, а в место close cursor 2 используй FETCH FIRST cursor 2 Я не люблю курсоры и использую в место них временные таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.03.2001, 14:59
|
|||
---|---|---|---|
|
|||
Простой вопрос про 2 курсора |
|||
#18+
Временная таблица это обычная таблица, которую мы сначала создаем, а потом, когда нужда в ней пропадает, удаляем, или что-то иное? (а то меня сомнения взяли И если не использоват курсор, как же тогда обрабатывать таблицу построчно? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.03.2001, 17:51
|
|||
---|---|---|---|
Простой вопрос про 2 курсора |
|||
#18+
Не нужно обрабатывать таблицы построчно. По возможности, конечно. Опиши задачу поподробней или тексты курсоров приведи - может есть способы. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
01.03.2001, 21:13
|
|||
---|---|---|---|
Простой вопрос про 2 курсора |
|||
#18+
Чего не могу понять, так это откуда у Вас возьмётся корректное значение @var1, ведь ей присваивается значение @@identity, а вставок я что-то не заметил ... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
02.03.2001, 11:03
|
|||
---|---|---|---|
|
|||
Простой вопрос про 2 курсора |
|||
#18+
надо использовать полную вложенность и DEALLOCATE внутреннего курсора делать в первом цикле. Была совершенно схожая проблема Вот пример работающего кода if @ShowParam=1 begin --Развертка параметров declare @IDGood int, @S varchar(1000), @P varchar(255) declare C cursor for select IDGood from #WorkTable open C fetch next from C into @IDGood while (@@FETCH_STATUS <> -1) begin select @S='' declare P cursor for select ltrim(rtrim(IsNull(convert(varchar(255),p.ShortName),p.Name)))+': '+ case when DataType='B' and pg.Value=1 then left(convert(varchar(1000),PickList),charindex(char(13)+char(10),convert(varchar(1000),PickList))-1) when DataType='B' and pg.Value=0 then substring(convert(varchar(1000),PickList),charindex(char(13)+char(10),convert(varchar(1000),PickList))+2,999) else rtrim(convert(varchar(255),pg.Value)) end + IsNull(' '+p.Unit,'')+';' from ParameterGood pg (NOLOCK) INNER JOIN Parameter p (NOLOCK)ON p.IDParameter=pg.IDParameter where IDGood=@IDGood and IncludedToDescr=1 order by pg.SortID open P fetch next from P into @P while (@@FETCH_STATUS <> -1) begin select @S=@S+@P+' ' fetch next from P into @P end close P deallocate P update #WorkTable set Parameters=@S where current of C fetch next from C into @IDGood end close C deallocate C ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=46&tablet=1&tid=1827277]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 371ms |
0 / 0 |