Wie mache ich auto increment
das primary key
in einer SQL Server
Datenbanktabelle, ich habe mich im Forum umgesehen, kann aber nicht sehen wie.
Ich habe die Eigenschaften überprüft, kann aber keine Option sehen. Ich habe eine Antwort gesehen, in der Sie zur Identity
Spezifikationseigenschaft gehen und sie auf yes und Identity increment
auf 1 setzen. Dieser Abschnitt ist jedoch ausgegraut und ich kann ihn nicht ändern das nein zu ja.
Es muss einen einfachen Weg geben, dies zu tun, aber ich kann ihn nicht finden.
sql-server
sql-server-2012
identity
Ledgemonkey
quelle
quelle
Antworten:
int
Stellen Sie sicher, dass der Datentyp der Schlüsselspalte lautet, und legen Sie die Identität manuell fest, wie in der Abbildung dargestelltOder führen Sie einfach diesen Code aus
Der Code wird ausgeführt, wenn dies
ID
nicht die einzige Spalte in der Tabelle istBildreferenz Fifos
quelle
IDENTITY
Eigenschaft auf alle numerischen Datentypen angewandt werden könnte (so könnte es seintinyint
,smallint
,int
,bigint
,numeric
,decimal
), ist die einzige Einschränkung , dass es nicht gebrochene Zahl darstellen könnte (so es kann nicht seinfloat
, oderreal
, wedernumeric
oderdecimal
mit einer Skala ungleich Null ) und ofc sollte die Identitätsspezifikation mit dem ausgewählten Datentyp kompatibel sein.Wenn Sie die Tabelle erstellen, können Sie eine
IDENTITY
Spalte wie folgt erstellen :Die
IDENTITY
Eigenschaft erhöht die Spalte automatisch von Nummer 1. (Beachten Sie, dass der Datentyp der Spalte eine Ganzzahl sein muss.) Wenn Sie dies einer vorhandenen Spalte hinzufügen möchten, verwenden Sie einenALTER TABLE
Befehl.Bearbeiten:
Ein bisschen getestet, und ich kann keine Möglichkeit finden, die Identitätseigenschaften über das Fenster Spalteneigenschaften für verschiedene Tabellen zu ändern. Ich denke, wenn Sie eine Spalte zu einer Identitätsspalte machen möchten, MÜSSEN Sie einen
ALTER TABLE
Befehl verwenden.quelle
Sie müssen den Abschnitt Identität erweitern, um Inkrement und Startwert verfügbar zu machen.
Bearbeiten: Ich habe angenommen, dass Sie einen ganzzahligen Datentyp haben, nicht char (10). Was vernünftig ist, würde ich sagen und gültig, wenn ich diese Antwort gepostet habe
quelle
yes
ist ausgegraut wie es istchar(10)
(aus dem gerade geposteten Kommentar)BookID int primary key identity
ich weder Startwert noch Inkrement angegeben. Ist das eine gute Vorgehensweise? Ursache Ich sehe Dokumentation in MSDN Wenn keine angegeben ist, ist der Standard (1,1).Erweitern Sie Ihre Datenbank, erweitern Sie Ihre Tabelle, klicken Sie mit der rechten Maustaste auf Ihre Tabelle und wählen Sie Design aus der Dropdown-Liste aus.
Gehen Sie nun zu den Spalteneigenschaften unten, scrollen Sie nach unten und suchen Sie nach Identitätsspezifikation . Erweitern Sie sie, und Sie finden, dass Identität Ja macht. Wählen Sie nun rechts darunter Identitätsinkrement und geben Sie den Wert an, den Sie inkrementieren möchten.
quelle
Vielleicht fehlt mir etwas, aber warum funktioniert das nicht mit dem SEQUENCE-Objekt? Ist das nicht das, wonach du suchst?
Beispiel:
Wenn Sie in einem INSERT-Befehl auf die Squence verweisen, verwenden Sie einfach:
Weitere Informationen und Optionen für SEQUENCE
quelle
IDENTITY
Sprünge manchmal Lücken hinterlassen und es dann wieder möglich ist, diese Lücken wieder zu füllen. SoIDENTITY
garantiert nicht IMMER inkrmenet ZustandWenn Sie Datentyp: int verwenden, können Sie die Zeile auswählen, die automatisch inkrementiert werden soll, und zum Tag mit den Spalteneigenschaften wechseln. Dort können Sie die Identität auf 'Ja' setzen. Dort kann auch der Startwert für die automatische Inkrementierung bearbeitet werden. Hoffe ich konnte helfen;)
quelle
Ich hatte dieses Problem, bei dem ich die Tabelle bereits erstellt hatte und sie nicht ändern konnte, ohne die Tabelle zu löschen. Ich habe also Folgendes getan: (Ich bin mir nicht sicher, wann sie dies implementiert haben, hatte es aber in SQL 2016)
Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle:
Script Table as > DROP And CREATE To > New Query Editor Window
Dann bearbeiten Sie das von Josien genannte Skript. Scrollen Sie nach unten, wo sich das
CREATE TABLE
befindet, suchen Sie Ihren Primärschlüssel und hängen Sie ihnIDENTITY(1,1)
an das Ende vor dem Komma an. Skript ausführen.Das DROP and CREATE-Skript war aufgrund dieses Problems auch für mich hilfreich . (Was das generierte Skript behandelt.)
quelle
Seien Sie vorsichtig, wenn Sie möchten, dass die ID-Elemente contigius sind oder nicht. Als SQLSERVER ID kann um 1000 springen.
Beispiel: Vor dem Neustart ID = 11 Nach dem Neustart fügen Sie eine neue Zeile in die Tabelle ein, dann lautet die ID 1012.
quelle
Sie können das Schlüsselwort
IDENTITY
als Datentyp für die Spalte zusammen mit denPRIMARY KEY
Einschränkungen beim Erstellen der Tabelle verwenden.Ex:
Hier bedeutet die erste '1' den Startwert und die zweite '1' den inkrementierenden Wert.
quelle
Der MS SQL Server verwendet das Schlüsselwort IDENTITY, um eine automatische Inkrementierungsfunktion auszuführen.
Im obigen Beispiel ist der Startwert für IDENTITY 1 und wird für jeden neuen Datensatz um 1 erhöht.
Tipp: Um festzulegen, dass die Spalte "Personid" bei Wert 10 beginnen und um 5 erhöht werden soll, ändern Sie sie in IDENTITY (10,5).
Um einen neuen Datensatz in die Tabelle "Personen" einzufügen, müssen Sie KEINEN Wert für die Spalte "Personid" angeben (ein eindeutiger Wert wird automatisch hinzugefügt):
quelle
Wenn die Tabelle bereits ausgefüllt ist, kann eine Spalte nicht in eine IDENTITY-Spalte geändert oder in eine Nicht-IDENTITY-Spalte konvertiert werden. Sie müssten alle Daten exportieren, dann können Sie den Spaltentyp in IDENTITY ändern oder umgekehrt und dann Daten zurück importieren. Ich weiß, dass es ein schmerzhafter Prozess ist, aber ich glaube, dass es keine Alternative gibt, außer die in diesem Beitrag erwähnte Sequenz zu verwenden.
quelle
ALTER TABLE ... SWITCH
nur die Metadaten wechseln, ohne die Daten berühren zu müssen. Beispiel: Sehen Sie, wie Sie das automatische Inkrementieren nach dem Erstellen einer Tabelle ohne Datenverlust festlegen.