comment incrémenter la valeur des colonnes entières de 1 en SQL

92

Mes questions sont

comment incrémenter la valeur d'une colonne de 1.

Par exemple, supposons qu'une colonne IDait les valeurs 1, 2, 3, 4, ..

Maintenant, lorsque je mets à jour cette table, la IDcolonne doit augmenter de 1,

Maintenant IDdeviendra 2,3,4,5, ..

Varinder
la source
un échantillon sur vous voulez? incrémenter la valeur de la colonne de 1 pour 1 ligne? toutes les lignes? quelle est votre table (DDL)? échantillons de données (DML)?
Kiquenet

Réponses:

155

Pour en ajouter une à chaque valeur du tableau ...

UPDATE myTable
SET ID = ID + 1

Pour créer une nouvelle valeur, une de plus que la précédente la plus élevée (généralement), utilisez une colonne avec IDENTITY

gbn
la source
39
Veuillez noter que cela ne fonctionne pas lorsque la colonne est NULL. Les colonnes NULL restent NULL, même après l'incrémentation. Pour résoudre ce problème, utilisez la ISNULLdéclaration comme celle-ci: UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Tiré de cette réponse SO )
Uwe Keim
SET [Lic] = [Lic] + @dif. Remarque la variable @dif peut être positive, 0 ou négative
Kiquenet
43

Si vous voulez avoir un numéro unique pour chaque ligne générée automatiquement, il s'agit de l'IDENTITÉ selon la réponse de Neil.

Si à chaque fois que vous mettez à jour la table, vous souhaitez augmenter les valeurs (c'est-à-dire qu'il ne s'agit pas de clés):

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

Essaye ça:

Update Emp set testCount = ISNULL(testCount, 0) + 1 where testId=1
Kishor Soneji
la source
1

Vous pouvez utiliser IDENTITYqui fera cela pour vous.

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

Lorsque vous insérez votre premier enregistrement, vous obtenez un Idsur 1.

Neil Knight
la source
1

Dans Oracle, le code est un peu plus délicat.

Vous devrez créer un champ auto-incrémenté avec l'objet séquence (cet objet génère une séquence numérique).

Utilisez la syntaxe CREATE SEQUENCE suivante:

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

Le code ci-dessus crée un objet séquence appelé seq_person, qui commence par 1 et s'incrémentera de 1. Il mettra également en cache jusqu'à 10 valeurs pour les performances. L'option cache spécifie le nombre de valeurs de séquence qui seront stockées en mémoire pour un accès plus rapide.

Pour insérer un nouvel enregistrement dans la table "Persons", nous devrons utiliser la fonction nextval (cette fonction récupère la valeur suivante de la séquence seq_person):

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

L'instruction SQL ci-dessus insère un nouvel enregistrement dans la table "Persons". La colonne "ID" recevrait le numéro suivant de la séquence seq_person. La colonne "FirstName" serait définie sur "Lars" et la colonne "LastName" serait définie sur "Monsen".

piyushj
la source
1

Vous pouvez essayer ce qui suit:

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

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