Другие языки программирования и технологии
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
В этом коде из временной таблицы получаем идентификатор и обрабатываем его (например, вставка и обновление данных в трёх таблицах по полученному идентификатору) . Как видите, курсор и цикл работают вместе.
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-коде не должно быть лишних тэгов переноса строк. Если её и решишь при помощи циклов, то решение будет громоздким. А золотое правило программистов БД - чем проще запрос, тем лучше.
Уже долго работаю с T-SQL, и знаю истину: если можно обойтись без курсора, лучше так и сделать. Про их взаимозаменяемость говорить нет смысла, потому что это совершенно разные вещи. Могу вам посоветовать на https://self-learning.ru/courses/t-sql выбрать для себя видеокурс по теме, узнаете много нового.
Похожие вопросы
- Люди, знающие SQL, помогите сделать запрос.
- SQL (какие ?)
- в языке СИ (просто СИ!!!!) чем отличаются два цикла. for(t=0; t
- JS-программеры! подскажите пожалуйста код для перемещения объекта курсором мыши.
- Перечень допустимых функций в SQL-запросе ADO Jet 4.0 (MS Access)
- Зачем нужен join(sql) и как он работает? Если можно, объясните на пальцах
- Хочу изучить SQl но никак не могу понять как использовать ее на практике. Помогите разобраться!!!
- Обучение Oracl, Sql, Visual Fox
- sql запрос как сделать предложение? Как написать девушке предложение выйти замуж с помощью SQL-запроса?
- SQL Server 2005 и Visual C# 2010