Newsgroup: it.comp.software.database
Titolo: Recuperare l'ultimo record inserito

Ciao a tutti, il mio problema sorge dalla necessità di recuperare
l'ultimo record inserito su un database SQL Server 2000, il fatto è che
pur avendo un campo PK che si autoincrementa di 1... i record non sono
in ordine crescente ma sono sparsi, quindi... quando io sono convinto di
aver preso l'ultimo record... magari mi ritrovo con un record che non mi
serve perchè non è l'ultimo.
Dov'è che sbaglio???
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Dov'è che sbaglio???
 
Premesso che non conosco SQL Server, ma immagino abbia un funzione max(),
quindi usa select max(CAMPO_CON_PK) from tabella e hai certamente l'id
dell'ultimo record inserito.
ciao

 Dov'è che sbaglio???
Esistono vari modi per recuperare l'ID generato da SQL Server,
in genere usando @@ID o similare, vedi la documentazione. Vedi
anche la "discussione" sulle PK su 
www.soft-land.org/documenti/pk.html
Davide

 quindi usa select max(CAMPO_CON_PK) 
Ma è normale che un campo PK non sia ordinato in modo crescente ma a
caso???


 caso???
L'ordine in cui sono mostrati i record quando fai una select e'
l'ordine con cui sono inseriti nelle "foglie" dei vari blocchi di
allocazione. Se li vuoi ordinati usa ORDER BY
Davide

 caso???
 
Non so su SQL Server, ma per es. su Oracle i record vengono
inseriti sui blocchi sul disco non in modo ordinato ma casuale a seconda
della disponibilita' del file system relativamente al datafile sul quale
l'oggetto (tabella nel nostro caso) e' inserito. Quindi non e' possibile
solo con una query avere il risultato ordinato a meno di non utilizzare
la clausola order by.
ciao

 la clausola order by.
Su Oracle e' possibile forzare l'ordine ricreando la tabella.
Visto che comunque non e' possibile un:
Create table tord
as
select * from t order bt c;
(non e' ammesso l'order by ...)
Si crea prima una vista (anche qui non e' ammesso l'order by, ma
usando un group by si forza comunque l'ordinamento)
create view v as
select * from t 
group by c, (tutti gli altri campi)
e quindi ora:
Create table tord
as
select * from v;
ti crea la tua tabella bella ordinata su disco.
Credo inoltre che usando una index organized table venga memorizzata
secondo l'ordine dell'indice (altrimenti come farebbe a fare
ricerche???) ma questo non ho verificato.
Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com

 caso???
Ciao Fabio,
prova a leggere la risposta che ho dato a gennaio a un utente che chiedeva
informazioni sugli indici utilizzati da SQL Server:
http://www.google.com/groups?q=saltarello+group:microsoft.public.it.sql+author:lbenaglianospam%40tin.it&hl=it&lr=&ie=UTF-8&oe=UTF-8&as_drrb=b&as_mind=12&as_minm=5&as_miny=2002&as_maxd=17&as_maxm=4&as_maxy=2003&selm=b11rqd%24uctj5%241%40ID-154627.news.dfncis.de&rnum=1
Ciao!
-- 
Lorenzo Benaglia
Microsoft MVP - SQL Server
UGIdotNET - 
http://www.ugidotnet.org
UGISS - 
http://www.ugiss.org

 
http://www.b3soft.com
Su questo credo che il manuale confermi, relativamente alle index
organized si legge: 
'Full-index scan returns all rows in primary key order'
ciao

 Dov'è che sbaglio???
Se stai parlando di un campo con la proprieta' identity,
puoi usare la funzione @@IDENTITY (Es. SELECT @@IDENTITY)
che ritorna l'ultimo valore erogato per una determinata
connessione (attenzione quindi al connection pooling).
Ciao,
-- 
Gianluca Hotz
Backoffice MVP (SQL Server) MCP SQL Server and MCP Windows
Vice-President of the Italian User Group for SQL Server
Founding Member of the Italian User Group for .NET
http://www.ghotz.com
http://www.ugiss.org