Visualizzazione dei risultati da 1 a 9 su 9

Discussione: update top(x)

  1. #1
    Utente di HTML.it L'avatar di duebit
    Registrato dal
    Dec 2008
    Messaggi
    36

    update top(x)

    Salve, sto utilizzando la query in oggetto: UPDATE TOP (100), la query funziona, ma siccome a me interessa leggere il db a blocchi mi ritrovo con le righe "in eccesso" non lette.

    Mi spiego:
    se ho un db con 1212 righe,avvengono 12 letture di 100 elementi ciascuna e le restanti 12 vengono ignorate!
    Lo scopo è spezzettare l'invio di emails.

    MI confermate che la query TOP(100) può selezionare SOLO 100 elementi?
    Esiste una qualche query che non mi è nota che mi possa risolvere il problema?
    Oppure devo agire diversamente, magari con una ulteriore SELECT delle restanti istanze?

    Grazie
    Ciauz

  2. #2
    non ho mica capito... se usi TOP(n) è ovvio che lavori solo su n record e non su tutti. sii più chiaro, pls

  3. #3
    Utente di HTML.it L'avatar di duebit
    Registrato dal
    Dec 2008
    Messaggi
    36
    Originariamente inviato da optime
    non ho mica capito... se usi TOP(n) è ovvio che lavori solo su n record e non su tutti. sii più chiaro, pls

    praticamente devo leggere blocchi di 100 indirizzi per volta:
    leggo un blocco di 100 con campo "letto = 0"
    aggiorno il blocco con "letto = 1"
    vado avanti fino alla fine del db, però non mi vengono letti gli "ultimi" indirizzi, cioè l'ultimo blocco che contiene <100 indirizzi

  4. #4
    top(n) legge al massimo n, quindi anche meno di n. posta la query

  5. #5
    Utente di HTML.it L'avatar di pip19
    Registrato dal
    Dec 2001
    Messaggi
    512
    quoto optime...

    TOP(N) seleziona solo le prime N record del db in questione.
    Non ti fa procedere per "blocchi"

  6. #6
    Utente di HTML.it L'avatar di duebit
    Registrato dal
    Dec 2008
    Messaggi
    36
    Originariamente inviato da pip19
    quoto optime...

    TOP(N) seleziona solo le prime N record del db in questione.
    Non ti fa procedere per "blocchi"
    posso procedere per blocchi modificando di volta in volta il valore di un campo

  7. #7
    Utente di HTML.it L'avatar di duebit
    Registrato dal
    Dec 2008
    Messaggi
    36
    Originariamente inviato da optime
    top(n) legge al massimo n, quindi anche meno di n. posta la query
    In effetti ho verificato che seleziona anche meno di n record (c'era un response.end che mi bloccava il ciclo)

    Ora però vado in loop! Leggo i vari blocchi di 100 e leggo anche i "fuori blocco" ma mi va in loop
    codice:
    Set rs_List = Server.CreateObject("ADODB.Recordset")
     rs_List.Open("SELECT * FROM MailingList WHERE Inviata=0"),conn, 1, 3
    Do While NOT rs_List.EOF
    
       Set rs_DaInviare = Server.CreateObject("ADODB.Recordset")
        rs_DaInviare.Open("SELECT TOP 100 * FROM MailingList  WHERE Inviata = 0"), conn, 1, 3
        DaInviare = rs_DaInviare.RecordCount
        Response.Write("Selezionato blocco di: "&DaInviare&"
    ")
       Do While NOT rs_DaInviare.EOF
          'invio le email
          rs_DaInviare.MoveNext
        Loop 
        'fine del ciclo invio email in blocco
      
     Set rs_Inviate = Server.CreateObject("ADODB.Recordset")
        rs_Inviate.Open("UPDATE TOP (100) MailingList SET Inviata = 1 WHERE Inviata = 0"),conn, 1, 3
    
        rs_List.MoveNext
    Loop
    Response.Write("!-FINE-!")
    Praticamente mi va in loop sulla riga:
    Response.Write("Selezionato blocco di: "&Da Inviare&"
    ")
    dove non mi seleziona più nulla
    Grazie a tutti

  8. #8
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Per l'update non serve il recordset, devi solo eseguire la query.

    Roby

  9. #9
    Utente di HTML.it L'avatar di duebit
    Registrato dal
    Dec 2008
    Messaggi
    36
    Originariamente inviato da Roby_72
    Per l'update non serve il recordset, devi solo eseguire la query.

    Roby
    mi da errore
    sicuramente sbaglio io....come dovrei modificare la riga?

    Set rs_Inviate = Server.CreateObject("ADODB.Recordset")
    rs_Inviate.Open("UPDATE TOP (100) MailingList SET Inviata = 1 WHERE Inviata = 0"),conn, 1, 3

    solo in
    rs_Inviate.Open("UPDATE TOP (100) MailingList SET Inviata = 1 WHERE Inviata = 0"),conn, 1, 3

    grazie

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.