2009-12-04 3 views
14

Noob question ici, chaque fois que je modifie un certain enregistrement dans une table SQL Server 2008 R2, je veux incrémenter un enregistrement RevisionId; de le faire, j'utilise la syntaxe suivante:Incrémentation d'un entier dans SQL Server

UPDATE TheTable 
SET RevisionId=(SELECT RevisionId 
       FROM TheTable 
       WHERE [email protected]) + 1 
WHERE [email protected]; 

BTW, je vais mettre cela en un déclencheur pour que cela se produit automagiquement, mais alors que ce code fonctionne, il se sent assez maladroit — un nettoyant façon de le faire?

Répondre

34

Vous n'avez pas besoin de sélection intérieure:

UPDATE TheTable SET RevisionId = RevisionId + 1 WHERE [email protected] 
10

C'est un langage SQL pour incrémenter un champ:

UPDATE TheTable 
SET RevisionId = RevisionId + 1 
WHERE [email protected]; 
+0

Assurez-vous de le faire dans une transaction ou vous finirez par essayer de chasser les bogues les plus étranges. – Donnie

+8

@Donnie: de quoi parlez-vous? UPDATE ... SET champ = champ + 1 est toujours atomique. –

1

Si vous êtes à la recherche d'une valeur « Version ligne » , avez-vous envisagé d'ajouter une colonne TimeStamp à votre table? SQL Server le met à jour automatiquement pour vous automatiquement. Pas de code de votre part. Ils ne seront tout simplement pas numérotés séquentiellement, si c'est important pour vous.

+1

C'est aussi intéressant, merci pour le conseil! Dans ce cas, je veux aussi mettre à jour le conteneur de la ligne (j'ai une structure arborescente dans la table), mais utiliser une heure au lieu d'une révision peut aussi être une bonne idée –

+0

Le "timestamp" de SQL Server est un 64 bits nombre entier séquentiel pour votre base de données. C'est dommage que ça s'appelle timestamp parce que ça n'a absolument rien à voir avec les dates ou les heures. Il est conçu pour être utilisé par les processus de réplication. –

Questions connexes