курсоры t-sql: восстанавливает ли сначала содержимое курсора? - PullRequest
2 голосов
/ 04 ноября 2010

У меня есть блок чужого кода, который по сути делает это:

declare X cursor static for select * from stuff
open cursor X
fetch next from X
while @@fetch_status = 0
begin
  do stuff
  fetch next from X
end

fetch first from X
while @@fetch_status = 0
begin
  do different stuff
  fetch next from X
end

Чтобы избавиться от этого, да, я знаю, что курсоры плохие / больше не в моде / и т.д. Я не писал это. Я просто должен это исправить. Теперь к вопросу:

Если данные за нижележащим курсором изменяются между первым и вторым циклами, может ли второй цикл курсора видеть данные, отличные от первого цикла курсора? Или статический классификатор предотвращает это?

1 Ответ

3 голосов
/ 04 ноября 2010

Данные, полученные курсором, не изменятся.Как задокументировано здесь :

STATIC

Определяет курсор, который создает временную копию данных для использования курсором.На все запросы к курсору отвечают из этой временной таблицы в tempdb;поэтому изменения, внесенные в базовые таблицы, не отражаются в данных, возвращаемых выборками, сделанными для этого курсора, и этот курсор не допускает изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...