2009-12-04 29 views
14

Pregunta de noob aquí, cada vez que cambio un cierto registro en una tabla de SQL Server 2008 R2, quiero incrementar un registro de RevisionId; para hacerlo, estoy usando la siguiente sintaxis:Incrementando un entero en SQL Server

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

Por cierto, voy a poner esto en un disparador para que esto suceda automágicamente, pero mientras que este código funciona, se siente muy torpe — cualquier producto de limpieza forma de hacer esto?

Respuesta

34

que no es necesario el selecto interior:

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

Este es un lenguaje SQL para incrementar un campo:

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

Asegúrate de hacerlo en una transacción o terminarás persiguiendo a los bichos más extraños. – Donnie

+8

@Donnie: ¿de qué estás hablando? ACTUALIZAR ... SET campo = campo + 1 es siempre atómico. –

1

Si lo que buscas es un valor "versión de fila" , ¿ha considerado agregar una columna TimeStamp a su tabla? SQL Server lo actualiza automáticamente para usted "automágicamente". Sin código de su parte en absoluto. Simplemente no se numerarán secuencialmente, si eso es importante para ti.

+1

¡Eso también es interesante, gracias por el consejo! En este caso, también quiero actualizar el contenedor de la fila (tengo una estructura en árbol en la tabla), pero usar una hora en lugar de una revisión también puede ser una buena idea –

+0

La "marca de tiempo" de SQL Server es una de 64 bits entero secuencial para su base de datos. Es una lástima que se llame marca de tiempo porque no tiene absolutamente nada que ver con fechas u horas. Está diseñado para ser utilizado por procesos de replicación. –

Cuestiones relacionadas