powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Испортит ли курсор такая конструкция:
12 сообщений из 12, страница 1 из 1
Испортит ли курсор такая конструкция:
    #32049810
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здраствуйте! Изв за нелепый вопрос
Ест курсор:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   ...
   declare @cursel cursor
   local forward_only
   for select *
   from #sel
   where qty >  0  and _hide =  1 
   order by olongid
   for update qty, _hide

   open @cursel
 -------
 
   ...
   ...
   if ... begin
      update #sel
      set _hide =  0 
      where qty =  10 
      where current of @cursel
   end
   ...
   fetch @cursel
   ...

Могу ли я не попасть на какую-либо строку, или попасть дважды после update
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049812
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если скажешь

declare @cursel cursor
local forward_only static
for select *
from #sel
where qty > 0 and _hide = 1
order by olongid
for update qty, _hide

то точно не попадешь.
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049813
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы осознанно хотите курсор использовать? Может без него попробывать?
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049814
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я стараюсь кнему не прибегать, но этот случай - исключение
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049816
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне прийдется двумя курсорами стоять на таблице закупок и продаж и создавать табл связей, попеременно подтягивая то один курсор, то второй в зависимости от количеств в конкретных строках исходных таблиц
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049817
Фотография VVG_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, сглупил и поспешил. Мой ответ просьба не засчитывать.
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32049942
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу ли я не попасть на какую-либо строку, или попасть дважды после update

BOL - Accessing and Changing Relational Data - Cursors - Cursor Types - Forward-only Cursors

"Because the cursor cannot be scrolled backward, however, changes made to rows in the database after the row was fetched are not visible through the cursor, except for the case where a value used to determine the location of the row within the result set is modified, such as updating a column covered by a clustered index."
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32050008
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
->Glory
>>except for the case where a value ... is modified ...
и что же всетаки будет в этом кейсе? :)
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32050018
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ведь ясно написано, что это может произойти если в результате изменения записи изменится значение, с помощью которого определяется положение записи в курсоре. Как явный пример, это изменение столбца, входящего в кластерный индекс.

А вот каким образом сервер выбирает "a value used to determine the location of the row" - это вопрос. При наличии первичного ключа или поля с identity IMHO все просто - они и будут этим значением. А вот при их отсутствии сервер может выбрать и совокупуность всех полей в качетве ключа, а может и что-нибудь свое "придумать".
Угадать, имея в наличии только информацию о том, что временная локальная таблица #sel содержит поля qty, _hide и olongid плюс еще что-то, я не возмусь.
Хотя я бы исходил из наихудщих предположений.
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32050035
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... в моем случае курсор ходит по строкам, имеющим _hide = 1. Если на очередном шаге цикла с поиощью UPDATE
Код: plaintext
1.
А- погасить часть, еще не фетченных записей (_hide =  0 ),
Б- открыть часть, еще не фетченных записей (_hide =  1 ), 
попадуться ли они при следующем fetch next
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32050036
vadim_march
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... в моем случае курсор ходит по строкам, имеющим _hide = 1. Если на очередном шаге цикла с помощью UPDATE
Код: plaintext
1.
А- погасить часть, еще не фетченных записей (_hide =  0 ),
Б- открыть часть, еще не фетченных записей (_hide =  1 ), 
попадуться ли они при следующем fetch next
...
Рейтинг: 0 / 0
Испортит ли курсор такая конструкция:
    #32050281
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз
Вопрос не в том, по каким полям "ходит" курсор, а в том, что он будет использовать для определения местоположения строки в наборе ("to determine the location of the row within the result set").
Если в вашей таблице только 3 поля - qty, _hide и olongid (во всяком случае в вашем примере видны только они) - причем ни одно из них не является первичным ключом, то IMHO может случится и зацикливание курсора, т.к. сервер может сам использовать поле _hide для идентификации строк курсора. А его-то вы как раз и обновляете.
Если же например поле olongid уже есть первичный ключ, то ничего подобного не произойдет.

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


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