2009-09-24 4 views
1

D'abord, je suis au courant de this question qui ne se répondit que ce que l'OP a été vraiment essayer de faire was'nt incrémenter une colonne d'identitéComment puis-je incrémenter une colonne d'identité sans insérer de valeur?


J'ai une colonne d'identité avec une graine en cours valeur de x, et je voudrais ressemer à x + 1 (par exemple, je veux que ma colonne d'identité pour passer directement de x à x + 2.

Je sais que je peux le faire en utilisant le command suivant

create procedure IncrementSeedValue 
(
@TableName varchar(255), 
@IncrementValue int 
) 
as 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
BEGIN TRANSACTION; 
    declare @v bigint 
    select @v = IDENT_CURRENT(@TableName)[email protected] 
    DBCC CHECKIDENT (@TableName, RESEED, @v) 
COMMIT TRANSACTION; 
go 

Howeve r, j'ai quelques questions:

  • Le niveau d'isolement "sérialisable" est-il adéquat ici?
  • Serait-ce conduire à un problème si j'utilise la mise en miroir SQL Server
  • Y at-il d'autres pièges que je devrais être au courant?
+0

Par transaction ...? – Dirk

Répondre

1

Une valeur IDENTITY est consommée pour chaque INSERT.

Je voudrais soit INSÉRER une valeur et immédiatement le SUPPRIMER, ou INSÉRER la valeur et émettre un ROLLBACK.

Dans les deux cas, la valeur IDENTITY sera consommée.

Je ne pense pas que les commandes DBCC doivent être utilisées dans du code "normal" et ne devraient être réservées qu'aux tâches administratives. Ou, si vous pouvez utiliser SET IDENTITY_INSERT ON et calculer quelle devrait être la valeur suivante avec la valeur ignorée.