come incrementare il valore intero delle colonne di 1 in SQL


92

Le mie domande sono

come incrementare il valore di una colonna di 1.

Ad esempio, supponiamo che una colonna IDabbia valori 1,2,3,4, ..

Ora, quando aggiorno questa tabella, la IDcolonna dovrebbe aumentare di 1,

Ora IDdiventerà 2,3,4,5, ..


qualsiasi campione su che vuoi? incrementare il valore della colonna di 1 per 1 riga? tutte le righe? qual è il tuo tavolo (DDL)? campioni di dati (DML)?
Kiquenet

Risposte:


155

Per aggiungere uno a ogni valore nella tabella ...

UPDATE myTable
SET ID = ID + 1

Per creare un nuovo valore, uno in più del precedente più alto (di solito), usa una colonna con IDENTITÀ


39
Si noti che questo non funziona quando la colonna è NULL. Le colonne NULL rimangono NULL, anche dopo l'incremento. Per risolvere questo problema, usa l' ISNULLaffermazione come questa: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Tratto da questa risposta SO )
Uwe Keim,

SET [Lic] = [Lic] + @dif. Nota la variabile @dif può essere positiva, 0 o negativa
Kiquenet

43

Se vuoi avere un numero univoco per ogni riga generata automaticamente, questa è IDENTITÀ come da risposta di Neil.

Se ogni volta che aggiorni la tabella vuoi aumentare i valori (cioè non sono chiavi):

Update MyTable
Set IDColumn = IDColumn + 1
Where <whatever>

8

Prova questo:

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

1

Puoi usare IDENTITYche lo farà per te.

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

Quando inserisci il tuo primo record, otterrai Id1.


1

In Oracle il codice è un po 'più complicato.

Dovrai creare un campo di incremento automatico con l'oggetto sequenza (questo oggetto genera una sequenza numerica).

Utilizza la seguente sintassi CREATE SEQUENCE:

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

Il codice precedente crea un oggetto sequenza chiamato seq_person, che inizia con 1 e aumenterà di 1. Inoltre memorizzerà fino a 10 valori per le prestazioni. L'opzione cache specifica quanti valori di sequenza verranno archiviati in memoria per un accesso più rapido.

Per inserire un nuovo record nella tabella "Persone", dovremo utilizzare la funzione nextval (questa funzione recupera il valore successivo dalla sequenza seq_person):

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

L'istruzione SQL precedente inserirà un nuovo record nella tabella "Persone". Alla colonna "ID" verrà assegnato il numero successivo dalla sequenza seq_person. La colonna "FirstName" sarebbe impostata su "Lars" e la colonna "LastName" sarebbe impostata su "Monsen".


1

Potresti provare quanto segue:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.