Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: MSSQL query di update

  1. #1
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881

    MSSQL query di update

    Ho una tabella con tre campi:
    t_ID (int, chiave del record)
    t_nvalut (int)
    t_mediavalut (decimal(10,2))

    Praticamente devo andare ad aggiornare la media delle valutazioni (t_mediavalut) e il numero di valutazioni (n_valut) dipendentemente dal valore della valutazione che può essere +1 o -1

    Nell'esempio che segue la valutazione è positiva quindi aggiungo +1
    codice:
    UPDATE tabella 
    SET  t_mediavalut= (((t_mediavalut * t_nvalut) +1)/(t_nvalut +1)) , 
     t_nvalut = (t_nvalut+1) 
    WHERE t_id = 17
    
    --con valutazione negativa sarebbe
    UPDATE tabella 
    SET  t_mediavalut= (((t_mediavalut * t_nvalut) -1)/(t_nvalut +1)) , 
     t_nvalut = (t_nvalut+1) 
    WHERE t_id = 17
    Anyway questa query mi restituisce un errore :
    Errore di overflow aritmetico durante la conversione di numeric nel tipo di dati numeric.
    La chiarezza del messaggio di errore richiama i fasti di Catalano in Quelli della notte, perciò mi chiedo WHAT THE HELL...?
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  2. #2
    Nei calcoli della media prova a castare nvalut a decima

  3. #3
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    none, stesso messaggio di errore
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  4. #4
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    hmm il campo t_mediavalut è un decimal(3,3): può essere che il calcolo mi restituisca un numero con più decimali e che debba ricondurlo a 3? (come si fa?)
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  5. #5
    Quote Originariamente inviata da supermac Visualizza il messaggio
    hmm il campo t_mediavalut è un decimal(3,3): può essere che il calcolo mi restituisca un numero con più decimali e che debba ricondurlo a 3? (come si fa?)
    a parte il fatto che nel primo post hai scritto t_mediavalut (decimal(10,2)) posti la query modificata? grazie

  6. #6
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    eh hai ragione, sorry
    codice:
    --ho provato questa e nunva
    UPDATE tabella
    SET  t_mediavalut= (    ((t_mediavalut * cast(t_nvalut as decimal(3,3))) +1)  / (t_nvalut +1)    ) 
    ,  t_nvalut = (t_nvalut+1) 
     WHERE t_id =17
    
    --questa nunva
    UPDATE tabella
    SET  t_mediavalut= (    ((t_mediavalut * cast(t_nvalut as decimal(3,3))) +1)  / (cast(t_nvalut as decimal(3,3))+1)    ) 
    ,  t_nvalut = (t_nvalut+1) 
     WHERE t_id =17
    
    --ma nunva neanche questa
    UPDATE tabella
    SET  t_mediavalut= cast (    ((t_mediavalut * cast(t_nvalut as decimal(3,3))) +1)  / (cast(t_nvalut as decimal(3,3))+1)  as decimal(3,3)  ) 
    ,  t_nvalut = (t_nvalut+1) 
     WHERE t_id =17
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  7. #7
    per evitare di andare nella direzione sbagliata, riesci a fare una copia di "tabella" con sia t_mediavalut che t_nvalut a decimal (3,3)? Poi prova la query

  8. #8
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    testato su un clone della tabella con il campo t_nvalut decimal(3,3)
    stesso messaggio di errore
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  9. #9
    l'errore te lo da' .net oppure SSMS?

  10. #10
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,881
    SSMS
    ...MA modificando il datatype di t_mediavalut in decimal(27,3) e lasciando quello di t_nvalut int, funziona senza errori anche la primissima
    codice:
    UPDATE tabella 
    SET  t_mediavalut= (((t_mediavalut * t_nvalut) +1)/(t_nvalut +1)) , 
     t_nvalut = (t_nvalut+1) 
    WHERE t_id = 17

    WHAT... THE... HELL....???
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

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.