Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [SQLSERVER2008] Utilizzo di cursori

    Ciao a tutti,

    avrei necessità di qualche spiegazione per l'utilizzo di un cursore ...

    Mi trovo nella seguente situazione:

    Tabella [dbo].[TY_SEGNALAZIONI](
    [DATA] [datetime] NOT NULL,
    [ID_TERM] [varchar](4) NULL,
    [SOCIETA] [varchar](2) NULL,
    [FILIALE] [varchar](3) NULL,
    [REGIONE] [varchar](3) NULL,
    [CDC] [varchar](4) NULL,
    [COD_STATO] [varchar](2) NULL,
    [GIORNI] [varchar](3) NULL,
    [DES_PREP] [varchar](50) NULL,
    [MAIL_PREP] [varchar](25) NULL,
    [DES_RS] [varchar](50) NULL,
    [MAIL_RS] [varchar](25) NULL,
    [DES_ROA] [varchar](50) NULL,
    [MAIL_ROA] [varchar](25) NULL,
    [DES_DR] [varchar](50) NULL,
    [MAIL_DR] [varchar](25) NULL
    da questa tabella dovrei estrarre tutti i record con un determinato stato e con un ceto n° giorni raggruppati per destinatario (mail_prep o se non presente mail_rs) in modo da poterli poi allegare ad una mail (sp_send_dbmail); ovviamente l'operazione dovrebbe ciclare in modo che vengano generate tante mail quanti sono i destinatari e ognuna delle mail dovrà contenere tutti i record relativi a quel destinatario.

    Per risolvere la problematica devo usare un cursore? E l'unica soluzione? Qualcuno può darmi una dritta per arrivare alla soluzione?


    Ciao e grazie
    IncorrectSyntax

  2. #2
    come prima cosa io farei un'estrazione in una tabella temporanea. poi hai due strade: o usi un cursore, oppure (aggiungendo alla tua temp un ID): leggi la prima riga (top 1), la tratti e la cancelli, e cicli fin quando ci sono record nella temp; pare macchinoso ma ho trovato che è più veloce (e pratico) di un cursore; non dico che sia sempre valido, ma nelle situazioni in cui mi sono trovato è stato così.

  3. #3
    Innanzi tutto grazie per l'aiuto ...

    Partendo però dal presupposto che non sono un gatto con "SQL" dovresti, se puoi, spiegarmi meglio come posso ciclare dentro ad una tabella temporanea oppure come definire un cursore (la sintassi + o - la conosco ... ma non ne conosco la logica ...
    IncorrectSyntax

  4. #4
    qualcosa del tipo

    codice:
    --- dopo aver creato la TEMP
    DECLARE @tmpId AS INT -- per segnarmi l'id della riga che sto trattando
    WHILE (SELECT COUNT(*) FROM #TEMP)>0 -- finché ci son record
       BEGIN -- inizio il giro
          SELECT TOP 1 @tmpId=Rkid FROM #TEMP -- leggo l'id della prima riga
          SELECT TOP 1 * FROM #TEMP WHERE RkId=@tmpId -- rileggo tutta la riga
    
          -- ---- qui fai quello che ti serve per mandare la mail
    
          DELETE FROM #temp WHERE RkId=@tmpId -- cancello la riga trattata
       END -- fine del giro
    buon lavoro

  5. #5
    Grazie mille!!!!!!!!!!!!

    Ora lo faccio e poi cmq vado a studiarmi un po' i cursori ....
    IncorrectSyntax

  6. #6

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.