Eimare i record in modo dfinitivo anche

martedì 08 marzo 2011 - 12.41

Carmelo1965 Profilo | Junior Member

Ciao a tutti, ho questo problema, ho cancellato tutti i record dalla tabella del server, ho provato ad inserire un nuovo record e mi parte dal numero 30 come ID, è possibile far ripartire il record al numero 1 ??? come posso eliminare tutti i Record in modo definitivo.

grazie mille Carmelo
Ciao, ringrazio tutti per la vostra pazienza...

alx_81 Profilo | Guru

>Ciao a tutti, ho questo problema, ho cancellato tutti i record
>dalla tabella del server, ho provato ad inserire un nuovo record
>e mi parte dal numero 30 come ID, è possibile far ripartire il
>record al numero 1 ??? come posso eliminare tutti i Record in
>modo definitivo.
Ciao, quella tabella probabilmente ha un campo identità che autoincrementa.
Il record è eliminato in modo definitivo ma l'incremento è solo in avanti, perchè lo stato a cui è arrivato il campo è salvato sul database server.
Quindi ogni record incrementa l'ultimo id salvato dopo l'utlimo inserimento.
Anche perchè pensa se dovessi eliminare non gli ultimi ma dei record in mezzo.. come fai a riempire quelli interni? Un algoritmo che cerca i buchi, diventa pesante poi e prestazionalmente parlando non è indicato.
Se usi identità le dovrai usare come sono, campi alternativi di autoconteggio su cui non dovrai mai fare logiche. Se ti serve un progressivo effettivo te lo devi fare tu come campo nuovo prendendo il record precedente ed aggiungendo 1 al valore di quel campo progressivo.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

paoval72 Profilo | Senior Member

Hai provato con questo?

DBCC CHECKIDENT ("nometabella", RESEED, 0);

Il reseed dovrebbe azzerarti la colonna autoincrementante e farla partire dall'indice che vuoi. Dopo il Reseed aggiungi l'ultimo indice: nell'esempio, il tuo primo nuovo record partirà dall'indice 1 (cioè 0 + 1).


Ciao,
Paolo

Carmelo1965 Profilo | Junior Member

ciao paoval72 , grazie mille, effetivamente volevo fare tutto ex novo e caricare i dati puliti, dato che quelli che ho erano come prova.
Grazie mille ancora quindi basta che faccio nel seguento modo
DBCC CHECKIDENT ("nometabella", RESEED, 0 + 1); ma posso farlo con un tasto pulsante
come funzione quando apro il Form dei Recods ????


Ciao, ringrazio tutti per la vostra pazienza...

paoval72 Profilo | Senior Member

>ciao paoval72 , grazie mille, effetivamente volevo fare tutto
>ex novo e caricare i dati puliti, dato che quelli che ho erano
>come prova.
>Grazie mille ancora quindi basta che faccio nel seguento modo
>DBCC CHECKIDENT ("nometabella", RESEED, 0 + 1); ma posso farlo
>con un tasto pulsante
>come funzione quando apro il Form dei Recods ????
>
>
>Ciao, ringrazio tutti per la vostra pazienza...
Ma l'eliminazione la vuoi fare dal form? La funzione che ti ho proposto è lato Db, ma credo che si possa legare ad una chiamata da codice.
Mi sono spiegato male, per azzerare il contatore basta inserire l'indice a zero:
DBCC CHECKIDENT ("nometabella", RESEED, 0)

Carmelo1965 Profilo | Junior Member

ciao scusami, non sono molto pratico, se mi dici dove devo farla la faccio tranquillamente dove mi dici te, se mi dici dove doevo scriver questa funzione lo faccio, forse dal server nell'interrogazione
della tabella ???

Ciao, ringrazio tutti per la vostra pazienza...

alx_81 Profilo | Guru

>ciao scusami, non sono molto pratico, se mi dici dove devo farla
>la faccio tranquillamente dove mi dici te, se mi dici dove doevo
>scriver questa funzione lo faccio, forse dal server nell'interrogazione
>della tabella ???
Attenzione..
il checkident ha bisogno di permission elevate:
"Caller must own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role."

Detto questo, che in teoria è bloccante, visto che in un ambiente multiutenza non è di certo buono dare permission di quel genere, sei sicuro che a regime poi dovrai svuotare e ricreare da capo sempre?
Queste operazioni sono di amministrazione del database, non applicative..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Carmelo1965 Profilo | Junior Member

la tabella l'ho creata io compreso il Database. Scusa una volta canellato tutto, non lo faccio ogni volta ma soltanto ora.
Grazie mille Carmelo

Ciao, ringrazio tutti per la vostra pazienza...

alx_81 Profilo | Guru

>la tabella l'ho creata io compreso il Database. Scusa una volta
>canellato tutto, non lo faccio ogni volta ma soltanto ora.
ok, era solo per dirti che i Database Console Command sono riservati ad un admin di solito.. e non alle applicazioni.
In questo caso, se ti serve una tantum e sei admin, paoval72 ti ha dato un buon consiglio a mio avviso.. però tu dicevi di trasformarla in una funzionalità.. e la cosa non mi sembrava di "amministrazione straordinaria"

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Carmelo1965 Profilo | Junior Member

Grazie Alex sei molto gentile per la premura che mi dai, sto facendo un prgramma da casa per l'Azienda e mi piacerebbe fargli vedere il Db. dal 1 codice.

Carmelo
Ciao, ringrazio tutti per la vostra pazienza...

alx_81 Profilo | Guru

>Grazie Alex sei molto gentile per la premura che mi dai, sto
>facendo un prgramma da casa per l'Azienda e mi piacerebbe fargli
>vedere il Db. dal 1 codice.
non basarti mai sull'identity però.. non ne hai il controllo, meglio fare un progressivo tuo..
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

Carmelo1965 Profilo | Junior Member

mi spighi come posso fare un mio progressimo, puoi farmi un esempio...
ad esempio se il mio indice parte del record 24 senza cancellare nulla, invece il mio indice del
txtrecord mi dice ovviamente 1 - 1 oppure 1 - 2 ect intendevi questo come indice.
ad edempio io faccio bscont.move +1 ect.
partendo da 1 ovviamente

Ciao, ringrazio tutti per la vostra pazienza...

alx_81 Profilo | Guru

>mi spighi come posso fare un mio progressimo, puoi farmi un esempio...
intendo aggiungere un campo nella tabella che vale il progressivo massimo prima dell'inserimento + 1.
Lo devi fare a mano
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5