Циклический просмотр строк таблицы с использованием каждой строки в качестве вставки в SQL - PullRequest
0 голосов
/ 28 октября 2019

У меня есть таблица с названием Reviews, и я не думаю, что содержание этого вопроса слишком много для вопроса, но я хочу просмотреть каждую строку этой таблицы, одну за другой, используя данные в каждой строке какчасть инструкции Insert Into. Как часть каждой используемой строки, мне нужно увеличить целое число (называемое Evid) на 1, потому что это целое число должно использоваться как часть инструкции Insert Into. Таким образом, в первом ряду будет 1, во втором ряду будет 2 и т. Д.

Я использую Advantage Architect, и ниже приведено приблизительное представление о том, как я вижу эту работу, и я знаю, что мне нужна помощь.

Пример строки таблицы, которую я хочу использовать для циклического просмотра:

IDENT|REFERENCE|TITLE
1234 | TEST    | testing 
4456 | TEST2   | testing2 

И я хочу вставить в другую таблицу, где она будет выглядеть следующим образом. Каждая строка, которую он просматривает из вышеприведенного, будет использоваться для вставки более одной строки в таблицу ниже, но с сохранением значения EVID в качестве последовательного значения INTEGER.

IDENT|REFERENCE|TITLE    |STAFF |EVID
1234 | TEST    | testing |STAFF1| 1
1234 | TEST    | testing |STAFF2| 1
4456 | TEST2   | testing2|STAFF1| 2
4456 | TEST2   | testing2|STAFF2| 2

_

declare evid integer;
declare cur cursor;

evid = 1;

open cur

//Do Insert Into
//Evid +1;
Close cur;

1 Ответ

0 голосов
/ 06 ноября 2019

Соответствующую информацию по использованию курсора можно найти в интерактивной справке

Изменение примера кода для вашей проблемы:

DECLARE @evid Integer;
DECLARE cur CURSOR;    

OPEN cur As SELECT * FROM sourceTable;

@evid = 1;


WHILE FETCH cur DO
    INSERT INTO destination (IDENT, REFERENCE, TITLE, STAFF, EVID)
        VALUES (cur.IDENT, cur.REFERENCE, cur.TITLE, 'STAFF1', @evid);
    INSERT INTO destination (IDENT, REFERENCE, TITLE, STAFF, EVID)
        VALUES (cur.IDENT, cur.REFERENCE, cur.TITLE, 'STAFF2', @evid);

    @evid = @evid + 1;
END WHILE;


CLOSE cursor1;
...