none
[SqlServer2005] FETCH Cursore senza variabili RRS feed

  • Domanda

  • ciclando su un cursore dovrei fare un insert su una tabella con moltissimi campi, è possibile scrivere fare la fetch next di un cursore senza mettere i valori in variabili ma

    scriverle direttamente nella query di insert?

    mi spiego meglio

    [code]
    ....


    WHILE @@FETCH_STATUS = 0
    BEGIN

     FETCH NEXT FROM curGroupedRows
     INTO @NUMEROFATTURA, @TARGA ,@COD_FORN_AUTORIZZAZIONE,@NRO_AUTORIZZAZIONE, @CODICERAGGRUPPAMENTO, @IMPORTO, @QTA,@ORDINAMENTO......  

     INSERT INTO TABELLA (campo1,campo2,campo3,campo3,.....) values (@NUMEROFATTURA,  @TARGA, @COD_FORN_AUTORIZZAZIONE,.......)


    END
    [/code]

    è possibile fare l'insert senza dichiarare tutte queste variabili @NUMEROFATTURA, @TARGA ecc ecc

    mercoledì 2 maggio 2012 13:44

Risposte

Tutte le risposte

  • salve,

    direi proprio di no, http://msdn.microsoft.com/en-us/library/ms190028.aspx...

    • Declare Transact-SQL variables to contain the data returned by the cursor. Declare one variable for each result set column. Declare the variables to be large enough to hold the values returned by the column and with a data type that can be implicitly converted from the data type of the column.
    • ......
    • Use the FETCH INTO statement to fetch individual rows and have the data for each column moved into a specified variable. Other Transact-SQL statements can then reference those variables to access the fetched data values. Transact-SQL cursors do not support fetching blocks of rows

    saluti


    http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools http://www.hotelsole.com/

    mercoledì 2 maggio 2012 17:32
    Moderatore
  • direi proprio di no

    E' vero, ma c'è da dire che con molta probabilità è possibile reingegnerizzare la logica per evitare del tutto l'uso dei cursori (che in vita mia ho utilizzato solo 1 volta lavorativamente parlando :-D).

    Ciao!


    Lorenzo Benaglia
    http://blogs.dotnethell.it/lorenzo
    http://social.technet.microsoft.com/Forums/it-IT/sqlserverit

    mercoledì 2 maggio 2012 19:07
    Moderatore
  • E se invece di un cursore usi una tabella temporanea con campo identity?

    Creata la tabella poi la cicli con un while @contatore < @totRows.

    venerdì 4 maggio 2012 22:42
  • salve,

    non capisco bene il significato del consiglio... personalmente userei SSMS per generare l'istruzione INSERT per la tabella di destinazione, che elenca tutte le colonne coinvolte, per poi rimuovere la colonna con proprieta' identity e via... sempre che, come gia' detto da Lorenzo, non si voglia/possa riscrivere il tutto senza l'utilizzo di un cursore T-SQL, cosa probabilmente possibile... ma il motivo dell'utilizzo della tabella temporanea mi resta "oscuro" :)

    saluti


    http://www.asql.biz - DbaMgr2k - DbaMgr and further SQL Tools http://www.hotelsole.com/

    sabato 5 maggio 2012 21:53
    Moderatore