使用每一行作为Insert Into-SQL遍历表的行

使用每一行作为Insert Into-SQL遍历表的行,sql,loops,cursor,advantage-database-server,Sql,Loops,Cursor,Advantage Database Server,我有一个名为Reviews的表,我不认为这个问题的内容太重要,但我想一行一行地检查这个表的每一行,使用每一行中的数据作为Insert Into语句的一部分。作为所使用的每一行的一部分,我需要将一个整数(称为Evid)递增1,因为该整数需要用作Insert Into语句的一部分。所以第一行有1,第二行有2,以此类推 我正在使用Advantage Architect,下面是我如何看待这项工作的大致想法,我知道我需要帮助 我要用于循环的表的行示例: IDENT|REFERENCE|TITLE 1234

我有一个名为Reviews的表,我不认为这个问题的内容太重要,但我想一行一行地检查这个表的每一行,使用每一行中的数据作为Insert Into语句的一部分。作为所使用的每一行的一部分,我需要将一个整数(称为Evid)递增1,因为该整数需要用作Insert Into语句的一部分。所以第一行有1,第二行有2,以此类推

我正在使用Advantage Architect,下面是我如何看待这项工作的大致想法,我知道我需要帮助

我要用于循环的表的行示例:

IDENT|REFERENCE|TITLE
1234 | TEST    | testing 
4456 | TEST2   | testing2 
我想插入到另一个表中,它看起来像这样。它从上面运行的每一行都将用于在下表中插入多行,但将EVID保留为顺序整数值

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;    

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;

请编辑您的问题,向我们展示样本数据和预期结果。事实上,您的问题太广泛(而且很可能不需要循环:一个
insert…select..
query可能会更有效地完成任务)。好的,我将编辑初始问题您不需要光标来执行此操作。啊,好的@GordonLinoff。如果我可以问的话,你认为可行的替代方案是什么?
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;