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

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

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


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

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

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

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

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


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

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

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

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

К стыду своему, я синтаксис курсора каждый раз гуглю.
... а так то еще 6.5 живым застал, хоть и шапочно...
...
Рейтинг: 0 / 0
11.01.2022, 13:34
    #40125732
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
Как вариант - использование CTE рассмотрите.
...
Рейтинг: 0 / 0
11.01.2022, 16:00
    #40125811
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
DaniilSeryi
Как вариант - использование CTE рассмотрите.
Рекурсивное? Только в крайнем случае.
...
Рейтинг: 0 / 0
12.01.2022, 22:49
    #40126159
Pingvin2021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
В моей многолетней практике практически не было ни одного случая, когда нельзя было заменить курсор на select/update/insert и т.д.
Имеется в виду выборка или изменение записей.
SQL Server не оптимизирован на использование курсоров от слова совсем никак.
На объеме, условно 100 миллионов записей, курсор подвесит Вам всё.
Единственная причина, по которой есть смысл использовать курсор, это специализированная обработка записей, невозможная селектами.
Например, есть список email и нужно им отправить ежемесячные отчёты по продажам.
Тогда да, делаем курсор, и для каждой записи шлём письмо.
...
Рейтинг: 0 / 0
12.01.2022, 23:19
    #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
13.01.2022, 00:18
    #40126175
Pingvin2021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
uaggster, Да, возможно.
Но из практики, в данном, конкретном случае, надо делать задержку.
Секунд 10 перед каждым письмом.
WAITFOR DELAY '00:00:10';
Иначе почтовый сервер раком встанет.
...
Рейтинг: 0 / 0
13.01.2022, 00:24
    #40126176
Pingvin2021
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
uaggster,
Да, но с динамическими запросами вляпываемся с проблемами доступа.
Нужно иметь прямой доступ ко всем объектам в запросе.
Но это совсем другая тема.
...
Рейтинг: 0 / 0
13.01.2022, 01:23
    #40126183
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем заменить курсор
Pingvin2021,

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

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


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


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


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