powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в написании "цикла"
11 сообщений из 11, страница 1 из 1
Помощь в написании "цикла"
    #39731306
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! :)

Проблема следующая, требуется написать "цикл", а может конечно это можно сделать и по другому, в котором запускалась процедура с 3 параметрами.

Дано:

dbo.procedure @param1, @param2, @param3
-- добавляет найденную строку в таблицу

dbo.table1 (c1, c2, c3, c4, c5, c6, c7, c8, c9, c10)
-- таблица в которую добавляем значения полученные из процедцры

Сейчас:
В процедуре имеется 10 переменных, в которые записывается результат, полученный используя параметры переданные в процедуру.
Код: sql
1.
2.
3.
SELECT * 
FROM table2 
WHERE v1=@param1 AND v2=@param2 AND v3=@param3 AND v4=1


таких селектов несколько с разным значением v4
Если запрос вернул NULL пишем в переменную "0". Далее все 10 переменных записываются в table1.

Процедура выполняется несколько десятков раз (@param1 @param2 @param3 - это списки)


Требуется:
что что вроде запуска 3х уровневого цикла, типа:
Код: java
1.
2.
3.
4.
5.
6.
7.
for (p1: @param1) {
    for (p2: @param2) {
        for (p3: @param3) {
            dbo.procedure p1, p2, p3
        }
    }
}



Нашел что это можно сделать при помощи курсоров, но некоторые пишут что это не есть хорошо. Может кто-нибудь подскажет как это лучше всего сделать или в какую сторону копать. :)

P.S. Если что то непонятно написал, спрашивайте. :)

Спасибо.
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731318
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему все эти циклы и вставки не делать прямо в процедуре-то?
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731325
Lomaster_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Она ещё в других местах используется )
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731354
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в обрамляющей процедуре...
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731370
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WHILE - чем не устраивает?
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731418
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_Нашел что это можно сделать при помощи курсоров, но некоторые пишут что это не есть хорошо. Может кто-нибудь подскажет как это лучше всего сделать или в какую сторону копать. :)Циклы в MSSQL делаются с помощью WHILE, а перебирать списки (наверное, имеются в виду таблицы со значениями?) можно курсорами, ну или можно имитировать их, доставая очередную запись, и удаляя её после обработки.
Ничего страшного в курсорах нет, они как раз предназначены для перебора значений.

"некоторые пишут что это не есть хорошо" - имеется в виду то, что лучше обрабатывать записи вместе, а не перебирать их по одной, но если уж вам нужно их перебрать для вызовов процедуры, то используйте курсор.
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731439
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgLomaster_Нашел что это можно сделать при помощи курсоров, но некоторые пишут что это не есть хорошо. Может кто-нибудь подскажет как это лучше всего сделать или в какую сторону копать. :)Циклы в MSSQL делаются с помощью WHILE, а перебирать списки (наверное, имеются в виду таблицы со значениями?) можно курсорами, ну или можно имитировать их, доставая очередную запись, и удаляя её после обработки.
Ничего страшного в курсорах нет, они как раз предназначены для перебора значений.

"некоторые пишут что это не есть хорошо" - имеется в виду то, что лучше обрабатывать записи вместе, а не перебирать их по одной, но если уж вам нужно их перебрать для вызовов процедуры, то используйте курсор.Курсор как раз и обходится обычно в цикле WHILE. Так что как их можно противопоставлять?
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731454
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_,

Ну совсем непонятно как и что должно работать. Тут три переменные, тут их десять.
Никакого алгоритма "цикла" не описано. Есть ощущение, что вы пытаетесь работать с данными в БД как в обычном языке программирования - построчно, отсюда for и циклы.
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731492
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapКурсор как раз и обходится обычно в цикле WHILE. Так что как их можно противопоставлять?Может, я не очень удачно выразился, непонятно для ТС...
Я имел в виду, что нужно сделать цикл, но записи перебирать в нём можно не только с помощью курсора.
Так что в принципе курсоры и циклы разные понятия, их нельзя ни противопоставлять, ни отождествлять :-)
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731729
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lomaster_,

t-SQL это декларативный язык, на нем надо писать "что делать", а не "как делать". Если вы будете писать обработку каждого значения и каждой строки декларативно, то получите значительное снижение производительности. Чтобы все работало быстро, сперва необходимо перенести список на сервер, затем выполнить по отношению к списку запрос.
...
Рейтинг: 0 / 0
Помощь в написании "цикла"
    #39731818
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помощь в написании "цикла"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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