J'ai une situation étrange avec certaines tables de ma base de données commençant ses ID à partir de 0, même si TABLE CREATE a IDENTITY (1,1). C'est le cas pour certaines tables, mais pas pour d'autres. Cela a fonctionné jusqu'à aujourd'hui.
J'ai essayé de réinitialiser la colonne d'identité:
DBCC CHECKIDENT (SyncSession, reseed, 0);
Mais les nouveaux enregistrements commencent par 0. J'ai essayé de le faire pour toutes les tables, mais certains commencent toujours à partir de 0 et d'autres à partir de 1.
Des pointeurs?
(J'utilise SQL Server Express 2005 avec Advanced Services)
DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )
Si aucune ligne n'a été insérée dans la table depuis sa création ou si toutes les lignes ont été supprimées à l'aide de l'instruction TRUNCATE TABLE, la première ligne insérée après avoir exécuté DBCC CHECKIDENT utilise new_reseed_value comme identité. Sinon, la ligne suivante insérée utilise new_reseed_value + la valeur d'incrément actuelle.
Donc, cela est prévu pour une table vide ou tronquée.
Si vous transmettez une valeur de réamorçage, la base de données démarre l'identité à partir de cette nouvelle valeur:
DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment
Vous n'avez pas besoin de passer la valeur a, si vous ne le faites pas, IDENTITY(a,b)
sera utilisé à la place:
DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'
Il s'agit généralement d'une meilleure pratique, car elle laisse la table plus proche de son état de création initial.
J'ai le même problème, la restauration à partir d'une sauvegarde après avoir modifié la base de données. Je viens d'ajouter un enregistrement fictif, puis de le supprimer ... puis de mettre RESEED à 0. Semble fonctionner.
C'est logique, puisque vous avez changé (réamorcé) la valeur d'identité à zéro?
DBCC CHECKIDENT (SyncSession, reseed, 1)
réamorcera votre colonne d'identité et s'assurera que le premier nouvel enregistrement commencera par 1.
Essaye ça
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