Я думаю, вам придется использовать временные таблицы:
создать таблицу #DataToTake (
seq int не нулевое тождество (1, 1),
PK_S int не null, - установите для него тот же тип, что и для PK в dataPool
PK_E int null, - установите для него тот же тип, что и для PK в dataPool
Col1 varchar (20) null, - установите для него тот же тип, что и для Col1 в dataPool
Col2 varchar (20) null - установите для него тот же тип, что и для Col2 в dataPool
)
вставить в #DataToTake
(PK_S, Col1, Col2)
выберите PK, Col1, Col2
из dataPool
где Col2 не является нулевым
заказ по PK
обновление #DataToTake set
PK_E = dtt2.PK_S
из #DataToTake внутреннего соединения #DataToTake dtt2 on
# DataToTake.seq = dtt2.seq - 1
обновление #DataToTake set
PK_E = (выберите Max (PK) + 1 из dataPool)
где PK_S = (выберите Max (PK_S) из #DataToTake)
обновить набор dataPool
Col2 = dtt.Col2
из dataPool внутреннее соединение #DataToTake dtt on
dataPool.PK> dtt.PK_S
и dataPool.PK
Удалить таблицу # DataToTake