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

    SQL SERVER - Select count, comportamento anomalo

    Ciao a tutti,
    da un paio di giorni sto riscontrando un problema con una banalissima select count, faccio una breve introduzione:
    Ho un applicazione web in ASP, all'interno di una tabella ho un campo ID (IDENTITY 1,1 BigInt NOT NULL). Un banalissimo contatore. Da qualche giorno a questa parte il contatore ha iniziato a conteggiare gli id in maniera non corretta, se l'ultimo id prima del problema era 86, quello successivo è diventato 10089 e così via.
    Per ovviare al problema ho creato una nuova tabella "A2" inserendo un ID (BigInt NOT NULL), in seguito ho copiato tutto il contenuto dell tabella "A" nella tabella "A2", ho eliminato la tabella "A" e rinominato la tabella "A2" in "A". Ho effettuato poi l'update dei campi mal calcolati dando una continuità che partisse dal l'ultimo numero (86). Per concludere, nell'applicazione, durante l'inserimento, ho fatto in modo di prelevare il valore MAX ID e settarlo come rs("maxID") + 1.
    Quando effettuo una SELECT COUNT (id), la query mi restituisce un conteggio di 92 record quando invece al momento ne ho 96. Qualcuno sa dirmi quale potrebbe essere il problema?

    Grazie!

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Tieni presente che l'IDENTITY non fa max + 1, ma si tiene in memoria l'ultimo ID.
    Quindi se hai 1,2,3,4 e cancelli 3 e 4, il prossimo inserimento sarà 5.
    In più nelle proprietà della "colonna" puoi definire il comportamento dell'identity, di quanto cresce e da che numero partire.

    Aggiungo.
    Se fai ragionamenti sul numero dell'identity sbagli. lo scopo è di avere un identificativo "univoco" di riga, non di avere un contatore delle righe presenti.

  3. #3
    Probabilmente mi sono spiegato male.
    L'ID è un identificativo, quando ho scritto contatore volevo dire autoincrementante. Il comportamento sbagliato sta proprio in questo ecco perché ho deciso di adottare il sistema di incrementare l'ID di + 1 tenendo conto del valore maxId. In questo modo l'ID sarà sempre univoco. La cosa che non mi torna è il comportamento del COUNT...

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Ok,
    Quindi ricapitolando hai un campo ID di tipo bigint, non è identity e il valore lo calcoli tu ogni volta facendo max + 1
    Il tuo problema è che la tabella contiene 96 record e invece la Count ti restituisce solo 92

    Sei sicuro che ci siano effettivamente 96 record nella tabella?
    Come hai inserito i dati? non è che non hai chiuso la transazione di alcune insert?

  5. #5
    Ho 96 dati, in una select restituisco tutti i rs, comprensivi di ID. Nel database vedo tutti e 96 i record.
    Le transazioni le chiudo alla fine di ogni insert.
    Non vorrei si sia incasinato qualcosa quando ho effettuato l'operazione descritta nel primo post, non saprei

  6. #6
    Utente di HTML.it L'avatar di notem1975
    Registrato dal
    Sep 2016
    residenza
    Milano
    Messaggi
    3
    È interessante tema

  7. #7
    potresti avere degli ID Null, in questo caso COUNT(ID) conta solo quelli validi. prova con COUNT(*)

  8. #8
    Ciao Optime,
    tutti gli ID sono popolati, avevo provato anche il COUNT(*) ma niente...
    Ho provato anche con rs.RecordCount ma niente.
    Il fatto è che la procedura l'ho testata prima in locale e non mi ha dato problemi, poi (come sempre ) in produzione fa le bizze...

  9. #9
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    A me era capitata una cosa simile tempo fa, ma avevo una procedura che caricava con insert singoli tonnellate di record.
    Il conteggio risultava sbagliato.
    Per sistemarlo facevo uno shrink(compatta) del database.

Tag per questa discussione

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.