Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Курстор  [new]
vah
Member

Откуда:
Сообщений: 2649
DECLARE Curs CURSOR FOR
SELECT ТекСвКв.Статус as ct51,r51.NKv,r51.Ndg FROM r51 INNER JOIN ТекСвКв ON 
r51.NKv=ТекСвКв.Выражение1 WHERE D>@SDT ORDER BY D DESC,r51.Статус
OPEN Curs
FETCH NEXT FROM Curs INTO @ct51,@nkv,@ndg 
WHILE @@FETCH_STATUS = 0
BEGIN
   FETCH NEXT FROM Curs
   UPDATE ТекСвКв
   ...............
   FETCH NEXT FROM Curs INTO  @ct51,@nkv,@ndg
END

В этом случае после UPDATE ТекСвКв значение (ТекСвКв.Статус) в курсоре Curs изменится или нет?


Заранее благодарен.
10 июн 09, 16:10    [7286479]     Ответить | Цитировать Сообщить модератору
 Re: Курстор  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36824
По умолчанию курсор FORWARD_ONLY получается. Что это такое, надо читать в BOL.
10 июн 09, 16:14    [7286509]     Ответить | Цитировать Сообщить модератору
 Re: Курстор  [new]
vah
Member

Откуда:
Сообщений: 2649
Гавриленко Сергей Алексеевич
По умолчанию курсор FORWARD_ONLY получается. Что это такое, надо читать в BOL.


Это немножко не то

FORWARD_ONLY
Указывает, что курсор может просматриваться только от первой строки к последней. Поддерживается только параметр выборки FETCH NEXT. Если параметр FORWARD_ONLY указан без ключевых слов STATIC, KEYSET или DYNAMIC, то курсор работает как курсор DYNAMIC. Если не указан ни один из параметров FORWARD_ONLY или SCROLL, а также не указано ни одно из ключевых слов STATIC, KEYSET или DYNAMIC, то по умолчанию задается параметр FORWARD_ONLY. Курсоры STATIC, KEYSET и DYNAMIC имеют значение по умолчанию SCROLL. В отличие от таких интерфейсов API баз данных, как ODBC и ADO, режим FORWARD_ONLY поддерживается следующими курсорами языка Transact-SQL: STATIC, KEYSET и DYNAMIC.

Сообщение было отредактировано: 10 июн 09, 17:16
10 июн 09, 16:57    [7286798]     Ответить | Цитировать Сообщить модератору
 Re: Курстор  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Я думаю, что Статус изменится (если Вы его апдейтите, конечно),
ибо по-умолчанию курсор динамический (если мне не изменяет память).
Но мне непонятно, почему в цикле перед UPDATE стоит FETCH NEXT?
Надо через строчку что-ли апдейтить?

Немного нравоучений (прошу прощения ):
  • а без курсора никак нельзя?
  • CURSOR LOCAL FAST_FORWARD, по-моему, получше будет
  • из-за того, что курсор динамический, следите за тем, чтобы запись после UPDATE
    не оказалась дальше текущей позиции курсора (в соответствии с ORDER BY).
    Если это случиться, запись будет обрабатываться снова, когда до неё дойдёт очередь.
    Так можно и бесконечный цикл получить
  • 10 июн 09, 17:09    [7286891]     Ответить | Цитировать Сообщить модератору
     Re: Курстор  [new]
    vah
    Member

    Откуда:
    Сообщений: 2649
    iap
    Я думаю, что Статус изменится (если Вы его апдейтите, конечно),
    ибо по-умолчанию курсор динамический (если мне не изменяет память).
    Но мне непонятно, почему в цикле перед UPDATE стоит FETCH NEXT?
    Надо через строчку что-ли апдейтить?

    Немного нравоучений (прошу прощения ):
  • а без курсора никак нельзя?
  • CURSOR LOCAL FAST_FORWARD, по-моему, получше будет
  • из-за того, что курсор динамический, следите за тем, чтобы запись после UPDATE
    не оказалась дальше текущей позиции курсора (в соответствии с ORDER BY).
    Если это случиться, запись будет обрабатываться снова, когда до неё дойдёт очередь.
    Так можно и бесконечный цикл получить


  • Спасибо. Без курсора справился - временными таблицами.
    10 июн 09, 17:19    [7286969]     Ответить | Цитировать Сообщить модератору
     Re: Курстор  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 46975
    vah
    Спасибо. Без курсора справился - временными таблицами.
    А что, одним UPDATEом никак нельзя?
    Бывает, конечно... Но редко.
    10 июн 09, 17:47    [7287156]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить