Другие языки программирования и технологии

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

Взаимозаменяемы ли курсоры и циклы в t-sql? То есть любую ли задачу, которую можно решить с помощью курсора, можно решить с помощью циклов? Если нет, то какой может быть пример задачи, решаемой с помощью курсора, но не решаемой с помощью циклов?
Roma Xara
Roma Xara
265
Ну если у Вас Молоток и Гвоздь - взаимозаменяемы, то очень интересно посмотреть ваши действия при забивании гвоздём молотка.. . Ну а если серьёзно, то просто курсор использовать без цикла нельзя.. . Потому что Вам всё равно придётся сделать что-то типа такого:

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

В этом коде из временной таблицы получаем идентификатор и обрабатываем его (например, вставка и обновление данных в трёх таблицах по полученному идентификатору) . Как видите, курсор и цикл работают вместе.
AA
Abdalgani1 Al_Nahare
8 280
Лучший ответ
Уже долго работаю с T-SQL, и знаю истину: если можно обойтись без курсора, лучше так и сделать. Использую их очень редко. Что касается взаимозаменяемости - тут говорить нечего, курсоры и циклы - вещи совершенно разные. Это как говорить о взаимозаменяемости insert и update. Например, такая задачка: есть у тебя таблица с какими-то данными. Тебе нужно сделать из неё выборку и из неё составить, например, HTML-код, чтобы он вылез одной строкой и давал твой результат как пронумерованный список (не стандартный) . При том, в этом HTML-коде не должно быть лишних тэгов переноса строк. Если её и решишь при помощи циклов, то решение будет громоздким. А золотое правило программистов БД - чем проще запрос, тем лучше.
Уже долго работаю с T-SQL, и знаю истину: если можно обойтись без курсора, лучше так и сделать. Про их взаимозаменяемость говорить нет смысла, потому что это совершенно разные вещи. Могу вам посоветовать на https://self-learning.ru/courses/t-sql выбрать для себя видеокурс по теме, узнаете много нового.