Как обновить курсор, объявленный только для части базовой таблицы - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужны два курсора на разных подмножествах одной и той же исходной таблицы

Что у меня есть: У меня есть табличная переменная, содержащая два столбца Int

Declare @originalData Table (Nr Int, Count Int).

Она содержит только несколько строк, максимум около 300. Давайте иметь следующие 10 строк:

  Nr  Count
------------
   0     1
   1     6
   2     0
   .     .
   .     .
   7     4
   8     5
   9     2

Для достижения того, что я хочу, у меня есть еще одна таблица, скажем так Declare @extended Table(Id Identity, Nr Int, Count Int) который (кроме столбца идентификаторов) вставил дополнительные строки от конца на вершину, а некоторые - от предыдущей вершины до конца. Это может выглядеть так:

Id  Nr  Count
-------------
 1   8     5  -- 2 rows from prior end to top
 2   9     2  -- 
 3   0     1
 4   1     6
 5   2     0
 .   .     .
 .   .     .
 8   7     4
 9   8     5
10   9     2
11   0     1   -- 2 rows from prior top to end
12   1     6   --

Мне бы хотелось иметь два курсора, каждый из которых подмножество s в таблице @extended:

  1. один, включая строки, вставленные сверху через все строки, но строки вставлены до конца Declare C1 Cursor Local Scroll for (Select Nr, Count From @extended Where Id>=3) For Update Of Count удерживая все строки и строки, вставленные в конец, и
  2. другую, включая строки, начинающиеся со строк, вставленных сверху, и все остальные строки , но строку, вставленную в конец, как Declare C2 Cursor Local Scroll For (Select Top(12) Nr, Count from @extended) For Update Of Count.

Пока все работает. Единственное, что по команде обновления Update @extended Set Count=Count+1 Where Current Of C1 возникает сообщение «Сообщение 16929 ... Курсор доступен только для чтения».

Но почему ?

...