Los valores de las columnas de identidad de SQL server comienzan en 0 en lugar de 1


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

He intentado 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 algunas todavía comienzan desde 0 y otras desde 1.

Alguna sugerencia?

(estoy usando SQL Server Express 2005 con Servicios avanzados)

Author: Muxa, 2009-04-07

6 answers

Desde DBCC CHECKIDENT

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

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

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

 42
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-18 15:55:15

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

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

Sin embargo, no tienes que pasar el valor a, si no lo haces IDENTITY(a,b) se usará en su lugar:

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

Esto suele ser una mejor práctica, ya que deja la tabla más cerca de su estado inicial creado.

 4
Author: Keith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-05 14:07:58

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

DBCC CHECKIDENT (SyncSession, reseed, 1)

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

 2
Author: Frederik Gheysels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-07 08:43:46

Tengo el mismo problema, restaurar desde una copia de seguridad después de modificar la base de datos. Solo añado un registro ficticio y luego lo borro... a continuación, establezca el RESEMBRADO en 0. Parece funcionar.

 2
Author: Larry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-30 15:01:10

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 
 1
Author: Tanveer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-21 12:22:07
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )

Esta es una manera de comenzar un id con Zero(0), luego eliminar todas las filas de la tabla y volver a poner los datos en la tabla.

 -1
Author: Azam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-26 08:17:26