powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чем заменить курсор
18 сообщений из 18, страница 1 из 1
Чем заменить курсор
    #40125532
BBS_BOSS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Я выполнял тестовое задание при трудоустройстве и меня не взяли.
Одна из причин была повсеместное использование курсоров.

Курсоры я использовал для перебора списка (списка имён сотрудников, товаров и тд) и вот сейчас у меня вопрос: чем можно заменить курсоры?
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125534
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BBS_BOSS
Доброго времени суток!
Я выполнял тестовое задание при трудоустройстве и меня не взяли.
Одна из причин была повсеместное использование курсоров.

Курсоры я использовал для перебора списка (списка имён сотрудников, товаров и тд) и вот сейчас у меня вопрос: чем можно заменить курсоры?


select -ами
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125543
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BBS_BOSS,

циклом:
0) нужное кол-во записей выносите в #таблицу
1) пока есть записи выбираете одну в нужном порядке
2) обрабатываете ее
3) удаляете выбранную из #таблицы и см. п.1
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125548
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
BBS_BOSS,

циклом:
0) нужное кол-во записей выносите в #таблицу
1) пока есть записи выбираете одну в нужном порядке
2) обрабатываете ее
3) удаляете выбранную из #таблицы и см. п.1

Осподе, милосердный!
Доколе изобретать самопальные курсоры?
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125549
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
BBS_BOSS,

циклом:
0) нужное кол-во записей выносите в #таблицу
1) пока есть записи выбираете одну в нужном порядке
2) обрабатываете ее
3) удаляете выбранную из #таблицы и см. п.1


Для начала бы узнать, что именно юзер делал курсорами, может там все по-другому решается
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125554
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я курсором делал партионный учет.
Ну или список ключей, чтобы передать его в сложную сторонюю ХП.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125565
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BBS_BOSS
повсеместное использование курсоров.
и меня не взяли
Разумно.

BBS_BOSS
чем можно заменить курсоры?
Ну, операциями без курсоров. То есть командами DML.
Если вы, например, все математические операции выполняете циклами по буквам в символьных представлениях чисел, это явно может не понравиться.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125654
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BBS_BOSS
Я выполнял тестовое задание при трудоустройстве и меня не взяли.
Одна из причин была повсеместное использование курсоров.

Думаю, основной причиной были не курсоры как таковые, а императивный подход при решении заданий. В разработке для MSSQL такое не поощряется.
И вот это, кстати
komrad
BBS_BOSS,

циклом:
0) нужное кол-во записей выносите в #таблицу
1) пока есть записи выбираете одну в нужном порядке
2) обрабатываете ее
3) удаляете выбранную из #таблицы и см. п.1
- тоже императивщина чистой воды.
BBS_BOSS
вот сейчас у меня вопрос: чем можно заменить курсоры?
Для этого нужно озвучить, что вы пытались сделать с помощью курсоров.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125657
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BBS_BOSS
Одна из причин была повсеместное использование курсоров.

К стыду своему, я синтаксис курсора каждый раз гуглю.
... а так то еще 6.5 живым застал, хоть и шапочно...
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125732
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - использование CTE рассмотрите.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40125811
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi
Как вариант - использование CTE рассмотрите.
Рекурсивное? Только в крайнем случае.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126159
Pingvin2021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В моей многолетней практике практически не было ни одного случая, когда нельзя было заменить курсор на select/update/insert и т.д.
Имеется в виду выборка или изменение записей.
SQL Server не оптимизирован на использование курсоров от слова совсем никак.
На объеме, условно 100 миллионов записей, курсор подвесит Вам всё.
Единственная причина, по которой есть смысл использовать курсор, это специализированная обработка записей, невозможная селектами.
Например, есть список email и нужно им отправить ежемесячные отчёты по продажам.
Тогда да, делаем курсор, и для каждой записи шлём письмо.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126169
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pingvin2021

Например, есть список email и нужно им отправить ежемесячные отчёты по продажам.
Тогда да, делаем курсор, и для каждой записи шлём письмо.

И даже в этом случае можно обойтись без курсора, если список этих емейлов ограничивается парой-тройкой тысяч, максимум.
Через динамический sql.
Что-нибудь типа

Код: sql
1.
2.
3.
4.
declare @s nvarchar(max)

set @s= (select N';exec sp_sendmail @address=''' + a.email + '''' from dbo.emails a for xml path(''), type).value('.', 'nvarchar(max)');
exec(@s);


Причем в @s можно предусмотреть и обработку исключений try - catch, и транзакции, да всё, что угодно.
Идиотизм, конечно... Но иногда писать курсоры - такая лень.
Да и пример в мсдн нагуглить лениво, а синтаксис всё равно не вспоминается.
))))
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126175
Pingvin2021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster, Да, возможно.
Но из практики, в данном, конкретном случае, надо делать задержку.
Секунд 10 перед каждым письмом.
WAITFOR DELAY '00:00:10';
Иначе почтовый сервер раком встанет.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126176
Pingvin2021
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster,
Да, но с динамическими запросами вляпываемся с проблемами доступа.
Нужно иметь прямой доступ ко всем объектам в запросе.
Но это совсем другая тема.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126183
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pingvin2021,

зависит от настроек почтового сервера или релея. У нас было настроено на пачки не более 50 писем, чтобы не спамили. И 5 секундные интервалы.
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126187
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BBS_BOSS
Я выполнял тестовое задание при трудоустройстве и меня не взяли.
Одна из причин была повсеместное использование курсоров.

Курсоры я использовал для перебора списка (списка имён сотрудников, товаров и тд) и вот сейчас у меня вопрос: чем можно заменить курсоры?


наверное сами не подозревали о существовании курсоров) вот и не взяли)
а как еще распечатать имена сотрудников, например?
...
Рейтинг: 0 / 0
Чем заменить курсор
    #40126188
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pingvin2021
uaggster, Да, возможно.
Но из практики, в данном, конкретном случае, надо делать задержку.
Секунд 10 перед каждым письмом.
WAITFOR DELAY '00:00:10';
Иначе почтовый сервер раком встанет.


не встанет. sendmail умный сам по-себе.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чем заменить курсор
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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