2012-04-25 4 views
5

Come ottenere il risultato in WITH table AS nel ciclo CURSOR? Ho già chiesto su come ottenere risultati ricorsive dal mio tavoloCome utilizzare la tabella WITH con risultato all'interno del ciclo del cursore per eseguire la procedura memorizzata

How to read all records recursively and show by level depth TSQL

;with C as 
(
    definition ... 
) 

Ho creato ciclo cursore dove voglio correre stored procedure specifica per tutti i risultati in table

declare @id int, @parent int 
declare cur cursor local fast_forward 
for 
    select id, parent from C 
open cur 
fetch next from cur into @id, @parent 
while @@fetch_status = 0 
    begin 
    exec storedProcedure @[email protected], @[email protected] 
fetch next from cur into @id, @parent 
end 
close cur 
deallocate cur 

Il problema è che il CURSORE non conosce table dal risultato WITH AS.

Invalid object name 'C'. 

risposta

3

È possibile creare una tabella temporanea o una variabile di tabella per contenere le righe restituite dalla query CTE e quindi utilizzare tale tabella come origine per il cursore.

declare @T table 
(
    id int, 
    parent int 
) 

;with C as 
(
    select 1 as id, 2 as parent 
) 
insert into @T 
select id, parent 
from C 

declare cur cursor for select id, parent from @T