2012-05-10 5 views
0
declare @i int 
declare @skool float 

declare schoolCursor cursor for 
select distinct choice from tempstuas 

open schoolCursor 
fetch next from schoolCursor into @skool 
while @@fetch_status = 0 
begin 
     while @i < 20 
      begin 
       update top(1) tempstuas set [email protected] where cnt = '' and cat = 1 and [email protected] 
       update top(1) tempstuas set [email protected] where cnt = '' and cat = 2 and [email protected] 
       update top(1) tempstuas set [email protected] where cnt = '' and cat=3 and [email protected] 

       set @i = @i + 1 
      end 
     fetch next from schoolCursor 
end 
close schoolCursor 
deallocate schoolCursor 

Это в основном происходит с помощью курсора, который возвращает индивидуальный номер места. Номер местоположения сохраняется как переменная из курсора, который мне нужно использовать внутри цикла while, который выполняет итерацию через определенное количество раз (20). То, что я вернусь, - это всего лишь курсор для всего списка номеров местоположений, но не выполняет итерацию по циклу while с помощью операторов обновления.Цикл While внутри цикла while while - SQL

+2

1). 'SET @i = 1' (или 0 или что вам нужно) непосредственно перед оператором' WHILE'? 2). Найдите способ сделать это без использования курсоров и циклов. – MatBailie

ответ

2

Курсоры и циклы, как правило, являются неправильным способом решения проблемы. У меня нет времени прямо сейчас, чтобы выяснить, что вы делаете, предлагая решение на основе набора, но серьезно вам нужно начать думать в наборах и перестать думать о циклах.

Однако ваша проблема заключается в том, что @i имеет нулевое значение, нуль не < 20.

см это испытание моей теории

declare @i int 

if @i<20 print'hi' 
else print 'bye' 
+0

HLGEM - это место на. Инициализируйте переменную i. Однако вы должны попытаться отойти от строки, используя агонистический подход к ряду (RBAR). Курсор очень часто является убийцей производительности. – Namphibian

+0

Инициализация i, i = 0 была решением, чтобы заставить это пройти через. Есть ли рекомендации для теории множеств или ссылок? Спасибо за вашу помощь и быстрый ответ. – central

+0

вот стартовое место: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM

Смежные вопросы