цикл sql



T sql курсор

Автор Настя задал вопрос в разделе Другие языки и технологии

t-sql (курсоры и циклы - взаимозаменяемы?) и получил лучший ответ

Ответ от Павел[гуру]
Ну если у Вас Молоток и Гвоздь - взаимозаменяемы, то очень интересно посмотреть ваши действия при забивании гвоздём молотка... Ну а если серьёзно, то просто курсор использовать без цикла нельзя... Потому что Вам всё равно придётся сделать что-то типа такого:
declare @id int
declare cData cursor
for select id from #tData
open cData
fetch from cData into @id
while (@@fetch_status = 0)
begin
-- Здесь выполняем операцию с записью ...
-- .
fetch from cData into @id
end
close cData
deallocate cData
В этом коде из временной таблицы получаем идентификатор и обрабатываем его (например, вставка и обновление данных в трёх таблицах по полученному идентификатору). Как видите, курсор и цикл работают вместе.

Ответ от Ёид[гуру]
Уже долго работаю с T-SQL, и знаю истину: если можно обойтись без курсора, лучше так и сделать. Использую их очень редко. Что касается взаимозаменяемости - тут говорить нечего, курсоры и циклы - вещи совершенно разные. Это как говорить о взаимозаменяемости insert и update. Например, такая задачка: есть у тебя таблица с какими-то данными. Тебе нужно сделать из неё выборку и из неё составить, например, HTML-код, чтобы он вылез одной строкой и давал твой результат как пронумерованный список (не стандартный) . При том, в этом HTML-коде не должно быть лишних тэгов переноса строк. Если её и решишь при помощи циклов, то решение будет громоздким. А золотое правило программистов БД - чем проще запрос, тем лучше.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: t-sql (курсоры и циклы - взаимозаменяемы?)
спросили в Явне
Как в sql сделать цикл (for или while)?
не бывает там циклов явных.. . там и так всё по циклу идёт по таблице на базе заданных условий
подробнее...
Курсор базы данных на Википедии
Посмотрите статью на википедии про Курсор базы данных
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*