jak zwiększyć wartość całkowitą Kolumny o 1 w SQL


92

Moje pytania to

jak zwiększyć wartość kolumny o 1.

Na przykład załóżmy, że kolumna IDma wartości 1, 2, 3, 4, ..

Teraz, gdy zaktualizuję tę tabelę, IDkolumna powinna wzrosnąć o 1,

Teraz IDstanie się 2,3,4,5, ..


jakaś próbka, którą chcesz? zwiększyć wartość kolumny o 1 dla 1 wiersza? wszystkie rzędy? jaki jest twój stół (DDL)? próbki danych (DML)?
Kiquenet,

Odpowiedzi:


155

Aby dodać jeden do każdej wartości w tabeli ...

UPDATE myTable
SET ID = ID + 1

Aby utworzyć nową wartość, o jedną więcej niż poprzednia najwyższa (zwykle), użyj kolumny z IDENTITY


39
Należy pamiętać, że to nie działa, gdy kolumna ma wartość NULL. Kolumny NULL pozostają NULL, nawet po zwiększeniu. Aby to rozwiązać, użyj następującego ISNULLoświadczenia : UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Zaczerpnięte z tej odpowiedzi SO )
Uwe Keim,

SET [Lic] = [Lic] + @dif. Uwaga Zmienna @dif może być dodatnia, 0 lub ujemna
Kiquenet

43

Jeśli chcesz mieć unikalny numer dla każdego wiersza generowany automatycznie, jest to TOŻSAMOŚĆ zgodnie z odpowiedzią Neila.

Jeśli za każdym razem, gdy aktualizujesz tabelę, chcesz zwiększyć wartości (tj. Nie są to klucze):

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


1

Możesz użyć, IDENTITYktóre zrobi to za Ciebie.

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

Kiedy wstawisz swój pierwszy rekord, otrzymasz Id1.


1

W Oracle kod jest nieco bardziej skomplikowany.

Będziesz musiał utworzyć pole autoinkrementacji z obiektem sekwencji (ten obiekt generuje sekwencję liczb).

Użyj następującej składni CREATE SEQUENCE:

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

Powyższy kod tworzy obiekt sekwencji o nazwie seq_person, który zaczyna się od 1 i będzie zwiększany o 1. Będzie również buforował do 10 wartości w celu zwiększenia wydajności. Opcja pamięci podręcznej określa, ile wartości sekwencji będzie przechowywanych w pamięci, aby uzyskać szybszy dostęp.

Aby wstawić nowy rekord do tabeli „Persons”, będziemy musieli skorzystać z funkcji nextval (ta funkcja pobiera następną wartość z sekwencji seq_person):

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

Powyższa instrukcja SQL wstawiłaby nowy rekord do tabeli „Osoby”. Kolumnie „ID” zostanie przypisany kolejny numer z sekwencji seq_person. Kolumna „FirstName” zostanie ustawiona na „Lars”, a kolumna „LastName” zostanie ustawiona na „Monsen”.


1

Możesz spróbować następujących rzeczy:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.