So erhöhen Sie den Wert der Ganzzahlspalten in SQL um 1


88

Meine Fragen sind

wie man den Wert einer Spalte um 1 erhöht.

Angenommen, eine Spalte IDhat die Werte 1,2,3,4, ..

Wenn ich diese Tabelle aktualisiere, IDsollte die Spalte um 1 erhöht werden.

Jetzt IDwird 2,3,4,5, ..


Irgendein Beispiel über dich? Spaltenwert für 1 Zeile um 1 erhöhen? alle Zeilen? Welches ist Ihre Tabelle (DDL)? Datenproben (DML)?
Kiquenet

Antworten:


150

So fügen Sie jedem Wert in der Tabelle einen hinzu ...

UPDATE myTable
SET ID = ID + 1

Verwenden Sie eine Spalte mit IDENTITY, um einen neuen Wert zu erstellen, der mehr als der vorherige höchste Wert ist (normalerweise)


39
Bitte beachten Sie, dass dies nicht funktioniert, wenn die Spalte NULL ist. NULL-Spalten bleiben auch nach dem Inkrementieren NULL. Um dies zu lösen, verwenden Sie die folgende ISNULLAussage : UPDATE myTable SET ID = ISNULL(ID, 0) + 1(Aus dieser SO-Antwort entnommen )
Uwe Keim

SET [Lic] = [Lic] + @dif. Hinweis @dif Variable kann positiv, 0 oder negativ sein
Kiquenet

42

Wenn Sie für jede automatisch generierte Zeile eine eindeutige Nummer haben möchten, ist dies IDENTITY gemäß Neils Antwort.

Wenn Sie jedes Mal, wenn Sie die Tabelle aktualisieren, die Werte erhöhen möchten (dh es handelt sich nicht um Schlüssel):

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

8

Versuche dies:

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

1

Sie können verwenden, IDENTITYwas dies für Sie erledigt.

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

Wenn Sie Ihren ersten Datensatz einfügen, erhalten Sie eine Idvon 1.


1

In Oracle ist der Code etwas kniffliger.

Sie müssen mit dem Sequenzobjekt ein Feld für die automatische Inkrementierung erstellen (dieses Objekt generiert eine Zahlenfolge).

Verwenden Sie die folgende CREATE SEQUENCE-Syntax:

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

Der obige Code erstellt ein Sequenzobjekt mit dem Namen seq_person, das mit 1 beginnt und um 1 erhöht wird. Außerdem werden bis zu 10 Werte für die Leistung zwischengespeichert. Die Cache-Option gibt an, wie viele Sequenzwerte für einen schnelleren Zugriff im Speicher gespeichert werden.

Um einen neuen Datensatz in die Tabelle "Personen" einzufügen, müssen wir die Funktion nextval verwenden (diese Funktion ruft den nächsten Wert aus der Sequenz seq_person ab):

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

Die obige SQL-Anweisung würde einen neuen Datensatz in die Tabelle "Personen" einfügen. Der Spalte "ID" würde die nächste Nummer aus der Sequenz seq_person zugewiesen. Die Spalte "Vorname" würde auf "Lars" und die Spalte "Nachname" auf "Monsen" gesetzt.


1

Sie könnten Folgendes versuchen:

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

INSERT INTO YourTable
        (Identity Column)    
VALUES    
        (@i + 1)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.