powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Простой вопрос про 2 курсора
6 сообщений из 6, страница 1 из 1
Простой вопрос про 2 курсора
    #32002651
Slonopotam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, есть 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. Работает!!!...
Но ведь это нерационально! Дурь какая-то…
Если кто поможет – буду просто счастлив
...
Рейтинг: 0 / 0
Простой вопрос про 2 курсора
    #32002652
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опиши cursir2 как SCROLL, а в место close cursor 2 используй FETCH FIRST cursor 2

Я не люблю курсоры и использую в место них временные таблицы
...
Рейтинг: 0 / 0
Простой вопрос про 2 курсора
    #32002653
Slonopotam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Временная таблица это обычная таблица, которую мы сначала создаем, а потом, когда нужда в ней пропадает, удаляем, или что-то иное? (а то меня сомнения взяли


И если не использоват курсор, как же тогда обрабатывать таблицу построчно?
...
Рейтинг: 0 / 0
Простой вопрос про 2 курсора
    #32002659
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не нужно обрабатывать таблицы построчно. По возможности, конечно. Опиши задачу поподробней или тексты курсоров приведи - может есть способы.
...
Рейтинг: 0 / 0
Простой вопрос про 2 курсора
    #32002664
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего не могу понять, так это откуда у Вас возьмётся корректное значение @var1, ведь ей присваивается значение @@identity, а вставок я что-то не заметил ...
...
Рейтинг: 0 / 0
Простой вопрос про 2 курсора
    #32002679
_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо использовать полную вложенность и 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
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Простой вопрос про 2 курсора
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]