valor usar una ultimo tabla scope_identity registro recuperar que obtener insertado generar como automatico sql sql-server-2005 tsql identity auto-increment

usar - recuperar el ultimo valor @@ identity en sql server



Los valores de la columna de identidad del servidor SQL comienzan en 0 en lugar de 1 (6)

De DBCC CHECKIDENT

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

Si no se han insertado filas en la tabla desde que se creó, o todas las filas se han eliminado mediante la instrucción TRUNCATE TABLE, la primera fila insertada después de ejecutar DBCC CHECKIDENT usa new_reseed_value como identidad. De lo contrario, la siguiente fila insertada usa new_reseed_value + el valor de incremento actual.

Por lo tanto, esto se espera para una tabla vacía o truncada.

Tengo una situación extraña con algunas tablas en mi base de datos comenzando sus ID desde 0, aunque TABLE CREATE tiene IDENTIDAD (1,1). Esto es así para algunas tablas, pero no para otras. Ha funcionado hasta hoy.

Intenté restablecer la columna de identidad:

DBCC CHECKIDENT (SyncSession, reseed, 0);

Pero los nuevos registros comienzan con 0. He intentado hacer esto para todas las tablas, pero algunos aún comienzan desde 0 y algunos desde 1.

¿Alguna sugerencia?

(Estoy usando SQL Server Express 2005 con Advanced Services)


Esto es lógico, ya que ha cambiado (resembrado) el valor de identidad a cero?

DBCC CHECKIDENT (SyncSession, reseed, 1)

reseveará su columna de identidad y se asegurará de que el primer registro nuevo comience con 1.


Prueba esto

DECLARE @c TABLE (TanvtechId varchar(10),NewTanvtechId Varchar(10)) INSERT INTO @c SELECT TanvtechId , Row_Number() OVER (ORDER BY TanvtechId ) from Tanvtech UPDATE G SET G.TanvtechId =a.NewTanvtechId FROM Tanvtech as G INNER JOIN @c as a ON a.TanvtechId =G.TanvtechId


Si pasa un valor reseed, la base de datos comenzará la identidad a partir de ese nuevo valor:

DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment

Sin embargo, no es necesario que pase el valor a, si no lo IDENTITY(a,b) se usará IDENTITY(a,b) :

DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value ''a''

Por lo general, esta es una mejor práctica, ya que deja la tabla más cerca de su estado inicial creado.


Tengo el mismo problema, la restauración de una copia de seguridad después de modificar la base de datos. Acabo de agregar un registro ficticio y luego eliminarlo ... luego establezco RESEED a 0. Parece que funciona.


DBCC CHECKIDENT ( Table_Name, RESEED, 0 )

Esta es una forma de iniciar una id con Zero(0) , luego eliminar todas las filas de la tabla y volver a colocar los datos en la tabla.