2016-01-05 31 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