cómo incrementar el valor de columnas enteras en 1 en SQL

92

Mi pregunta es

cómo incrementar el valor de una columna en 1.

Por ejemplo, supongamos que una columna IDtiene valores 1,2,3,4, ..

Ahora, cuando actualizo esta tabla, la IDcolumna debería incrementarse en 1,

Ahora IDse convertirá en 2,3,4,5, ..

Varinder
fuente
alguna muestra sobre lo que quieras? ¿Incrementar el valor de la columna en 1 para 1 fila? todas las filas? cual es tu mesa (DDL)? muestras de datos (DML)?
Kiquenet

Respuestas:

155

Para agregar uno a cada valor en la tabla ...

UPDATE myTable
SET ID = ID + 1

Para crear un nuevo valor, uno más que el anterior más alto (generalmente), use una columna con IDENTIDAD

gbn
fuente
39
Tenga en cuenta que esto no funciona cuando la columna es NULL. Las columnas NULL permanecen NULL, incluso después de incrementarlas. Para que esto se resuelva, use la ISNULLdeclaración como esta: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Tomado de esta respuesta SO )
Uwe Keim
SET [Lic] = [Lic] + @dif. Tenga en cuenta que la variable @dif puede ser positiva, 0 o negativa
Kiquenet
43

Si desea tener un número único para cada fila generada automáticamente, esta es la IDENTIDAD según la respuesta de Neil.

Si cada vez que actualiza la tabla desea aumentar los valores (es decir, no son claves):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>
kaj
fuente
8

Prueba esto:

Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
kishor soneji
fuente
1

Puede usar IDENTITYcuál hará esto por usted.

CREATE TABLE [dbo].[MyTable](
    [MyTableID] [int] IDENTITY(1,1) NOT NULL,
    -- Other columns
)

Cuando inserte su primer registro, obtendrá un valor Idde 1.

Neil Knight
fuente
1

En Oracle, el código es un poco más complicado.

Deberá crear un campo de incremento automático con el objeto de secuencia (este objeto genera una secuencia numérica).

Utilice la siguiente sintaxis CREATE SEQUENCE:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

El código anterior crea un objeto de secuencia llamado seq_person, que comienza con 1 y aumentará en 1. También almacenará en caché hasta 10 valores para el rendimiento. La opción de caché especifica cuántos valores de secuencia se almacenarán en la memoria para un acceso más rápido.

Para insertar un nuevo registro en la tabla "Personas", tendremos que usar la función nextval (esta función recupera el siguiente valor de la secuencia seq_person):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

La instrucción SQL anterior insertaría un nuevo registro en la tabla "Personas". A la columna "ID" se le asignará el siguiente número de la secuencia seq_person. La columna "Nombre" se establecería en "Lars" y la columna "Apellido" se establecería en "Monsen".

piyushj
fuente
1

Puedes probar lo siguiente:

DECLARE @i INT
SET @i = @@ROWCOUNT + 1

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Tony Gallone
fuente