2016-01-05 32 views
0

这应该是简单的,我无法找到一个方法来做到这一点:通过表中的所有行使用游标检索行

我想循环,我需要所有该行的列:

DECLARE cursor1 CURSOR FOR 
    SELECT * 
    FROM Table_1 order by l1; 

DECLARE rr ROW for cursor1;  /*does not work */ 

OPEN cursor1; 
FETCH NEXT FROM cursor1 into rr; /*does not work */ 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    INSERT INTO Centres 
    VALUES(rr.l1, rr.l2, rr.l3) /*does not work because of rr */ 

    FETCH NEXT FROM cursor1 into rr; /*does not work */ 
END; 

CLOSE cursor1; 
DEALLOCATE cursor1; 
GO 

不幸的是,我不能声明一个变量,它是我的光标的行类型...或者可以吗?

+4

目前您可以在没有游标(INSERT + SELECT)的情况下完成您的任务,这些都是您应该尽可能避免的事情... –

+3

您需要为游标使用变量。但更重要的是,你不需要光标。这只不过是一个插入语句。在这里使用光标会迫使它比它慢得多。 –

+2

对于游标返回的每个列,声明适当类型的变量。然后使用'FETCH NEXT FROM INTO @ col1,@ col2,... @ colN'。但正如其他人所指出的,您的任务可以在没有光标的情况下完成。 –

回答

1

不,不存在SQL Server中的类型。

4

我已经提到不需要游标,但你也应该总是在插入中指定列。沿着这些线你的整个光标可以简化为一个简单的插入语句。

Insert Centres(l1, l2, l3) 
select l1, l2, l3 
from Table_1