Ecco il mio problema: Ho un database di SQL Server chiamato emp
. Ha una tabella employee
(con colonna userid int
). Devo recuperare l'ultimo record dello userid
nella tabella employee
con il valore incrementale di id utente + 1. Al momento l'ho fatto sulla mia GUI. Quindi come scrivo una query sql per questo?Recupera l'ultimo record della tabella di SQL Server
risposta
Non si dovrebbe aumentare manualmente la colonna userid, utilizzare invece una colonna IDENTITY. Questo aggiungerà automaticamente 1 per te per ogni nuova riga.
CREATE TABLE Employees (
UserId INT IDENTITY PRIMARY KEY NOT NULL,
UserName NVARCHAR(255) NOT NULL,
// etc add other columns here
)
Se davvero hanno veramente a selezionare l'userid più alta è molto semplice query:
SELECT MAX(UserId) + 1
FROM Employees
[Edit]
sulla base di osservazioni, si dovrebbe usare la query SELECT MAX(UserId) + 1 FROM Employees
. Ma sappi che questo non garantisce che il numero sarà l'ID. Normalmente non visualizzerai un valore Id fino a quando il record non è stato salvato nel database.
Per tornare al il record con il più alto userid, si può fare:
SELECT TOP 1 userid
FROM employee
ORDER BY userid DESC
o ...
SELECT MAX(userid)
FROM employee
Se il piano è quello di incrementare quindi l'ID utente manualmente e inserire un nuovo registrare con quel nuovo ID, mi raccomando di non farlo, e se 2 processi tentassero di farlo allo stesso tempo? Utilizzare invece una colonna IDENTITY come id utente e lasciare che l'incremento venga gestito automaticamente.
Questo ti darà l'ultimo record inserito, Se non hai la colonna Identità.
EXECUTE ('DECLARE GETLAST CURSOR DYNAMIC FOR SELECT * FROM [User]')
OPEN GETLAST
FETCH LAST FROM GETLAST
CLOSE GETLAST
DEALLOCATE GETLAST
Se è stata impostata l'identità rispetto a quella che è possibile utilizzare in seguito.
SELECT top(1) ID from [YourTable] order by ID desc
Problema Sloved grazie a tutti per la risposta rapida –
C'è veramente ** non c'è bisogno di un cursore (un grande killer delle prestazioni !!) in questa situazione ..... –
Questo ti farà ottenere l'ultimo record inserito se non lo fai t hanno un ID come autoincremento. Prova a sostituire la tabella e vedi il risultato –
Per avere il nuovo ID utente prima del salvataggio, creare una tabella NextId.
Prima di inserire l'utente, ottenere il nuovo valore da nextID:
UserId = SELECT Coalesce(NextId, 0) + 1 from NextId
Poi aggiornare la tabella NextID:
UPDATE NEXTID SET NextId = IserID
e quindi utilizzare tale valore nel codice creazione dell'utente
È possibile ottenere lacune, ci sono metodi più complicati per evitarli; ma penso che questo lo farà
Se inserisci codice, XML o campioni di dati, ** per favore ** evidenzia quelle righe nell'editor di testo e fai clic su " codice esempi "pulsante ({}) sulla barra degli strumenti dell'editor per formattarlo in modo appropriato e la sintassi evidenziarlo! –
È questo il motivo per il meno 1? – Karel
grazie per il tuo rapido affidamento JK.ma il mio requiremnt è this.my gui avere un modulo chiamato nuovo emloyee.so c'è un testo feild mostra id utente da emp table.quando clic aggiungi nuovo dipendente voglio mostrare quel test val come ultimo valore di emp id +1. –
Se è necessario mostrare quale sarà l'ID del nuovo dipendente prima di aver effettivamente aggiunto il dipendente, utilizzare la query precedente: "SELEZIONA MAX (UserId) + 1 Dipendenti". Ma c'è la possibilità che questo non sia il numero Id quando il nuovo dipendente viene effettivamente salvato. –