2011-01-27 36 views
5

Aquí está mi problema: Tengo una base de datos de SQL Server llamada emp. Tiene una tabla employee (con la columna userid int). Necesito recuperar el último registro de userid en la tabla employee con incremento en el valor de usuario + 1. En este momento lo hice en mi GUI. Entonces, ¿cómo escribo una consulta sql para ello?Recuperar el último registro de la tabla de SQL Server

Respuesta

1

No debe aumentar manualmente la columna de ID de usuario, use una columna de IDENTIDAD. Eso agregará automáticamente 1 por cada nueva fila.

CREATE TABLE Employees (
    UserId INT IDENTITY PRIMARY KEY NOT NULL, 
    UserName NVARCHAR(255) NOT NULL, 
    // etc add other columns here 
) 

Si realmente tiene que seleccionar el ID de usuario más alto es una consulta muy simple:

SELECT MAX(UserId) + 1 
FROM Employees 

[Editar]

Sobre la base de sus comentarios, debe utilizar la consulta SELECT MAX(UserId) + 1 FROM Employees. Pero tenga en cuenta que esto no garantiza que el número será la identificación. Normalmente no mostraría un valor Id hasta después de que el registro se haya guardado en la base de datos.

+0

gracias por su rápida confianza JK.pero el mio requiremnt es this.my gui tiene un formulario llamado nuevo emloyee.so hay un campo de texto que muestra el ID de usuario de la tabla emp. Cuando haga clic en agregar nuevo empleado quiero mostrar ese val de prueba como último valor de emp id +1. –

+1

Si necesita mostrar cuál será el Id del nuevo empleado antes de agregarlo, utilice la consulta anterior: 'SELECT MAX (UserId) + 1 FROM Employees'. Pero existe la posibilidad de que ese no sea el número de identificación cuando el nuevo empleado realmente se guarda. –

2

Para devolver el expediente con el mayor identificador de usuario, que puede hacer:

SELECT TOP 1 userid 
FROM employee 
ORDER BY userid DESC 

o ...

SELECT MAX(userid) 
FROM employee 

Si su plan es entonces incrementar el ID de usuario de forma manual e inserte una nueva registrar con esa nueva identificación, recomendaría no hacerlo, ¿qué ocurre si 2 procesos intentan hacerlo al mismo tiempo? En su lugar, use una columna IDENTITY como userid y deje que el incremento se maneje automáticamente

-1

Esto le dará el último registro insertado, si no tiene la columna Identity.

EXECUTE ('DECLARE GETLAST CURSOR DYNAMIC FOR SELECT * FROM [User]') 
OPEN GETLAST 
FETCH LAST FROM GETLAST 
CLOSE GETLAST 
DEALLOCATE GETLAST 

Si ha configurado una identidad que puede utilizar a continuación.

SELECT top(1) ID from [YourTable] order by ID desc 
+0

Problema Sloved gracias a todos por la respuesta rápida –

+0

Hay ** realmente ** no hay necesidad de un cursor (asesino de gran rendimiento !!) en esta situación ..... –

+0

Esto le dará el último registro insertado si no lo hace t tiene una identificación como autoincrement. Pruebe a reemplazar la tabla y vea el resultado –

-1

Para tener el nuevo ID de usuario antes de guardarlo, cree una tabla NextId.

Antes de introducir el usuario, obtener el nuevo valor de NextID:

UserId = SELECT Coalesce(NextId, 0) + 1 from NextId 

A continuación, actualice la tabla NextID:

UPDATE NEXTID SET NextId = IserID 

Y a continuación, utilizar ese valor en su código de creación de usuarios

Puede obtener lagunas, existen métodos más complicados para evitarlas; pero creo que esto va a hacer

+0

Si publica código, XML o muestras de datos, ** por favor ** resalte esas líneas en el editor de texto y haga clic en " código de muestra "botón ({}) en la barra de herramientas del editor para formatear y sintaxis muy bien ¡Resaltarlo! –

+0

¿Es ese el motivo del menos 1? – Karel

Cuestiones relacionadas