Als Titel habe ich eine vorhandene Tabelle, die bereits mit 150000 Datensätzen gefüllt ist. Ich habe eine ID-Spalte hinzugefügt (die derzeit null ist).
Ich gehe davon aus, dass ich eine Abfrage ausführen kann, um diese Spalte mit inkrementellen Zahlen zu füllen, und dann als Primärschlüssel festlegen und die automatische Inkrementierung aktivieren kann. Ist dies der richtige Weg, um fortzufahren? Und wenn ja, wie fülle ich die Anfangsnummern?
sql-server
sql-server-2008
primary-key
alter-table
Angst vor einem Hackplaneten
quelle
quelle
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
aber ich wollte es nicht versuchen, ohne es mit einem Experten zu besprechen :) Ref. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
impliziert, dass es vorhandenNOT NULL
ist - also wieder - es ist nicht unbedingt notwendig. Aber ich ziehe es vor, explizit zu sein, und so habe ich immer dasNOT NULL
da, nur um absolut klar zu seinPRIMARY KEY
, wird der Clustered-Index automatisch für Sie erstellt (sofern Sie nicht ausdrücklich angebenNONCLUSTERED
)Sie können die IDENTITÄT nicht "einschalten": Es handelt sich um eine Tabellenwiederherstellung.
Wenn Sie sich nicht für die Nummernreihenfolge interessieren, fügen Sie die Spalte NOT NULL mit IDENTITY auf einmal hinzu. 150k Zeilen sind nicht viel.
Wenn Sie eine bestimmte Nummernreihenfolge beibehalten müssen, fügen Sie die Nummern entsprechend hinzu. Verwenden Sie dann den SSMS-Tabellen-Designer, um die IDENTITY-Eigenschaft festzulegen. Auf diese Weise können Sie ein Skript generieren, das die Spalte Löschen / Hinzufügen / Behalten von Nummern / Neueinstellung für Sie ausführt.
quelle
ALTER TABLE ... SWITCH
ist, aber ohne dies möglich ist.Ich hatte dieses Problem, konnte jedoch keine Identitätsspalte verwenden (aus verschiedenen Gründen). Ich habe mich dazu entschlossen:
Von hier ausgeliehen .
quelle
Wenn die Spalte bereits in Ihrer Tabelle vorhanden ist und null ist, können Sie die Spalte mit diesem Befehl aktualisieren (ID, Tabellenname und Tabellenschlüssel ersetzen):
quelle
Wenn wir eine Identitätsspalte in eine vorhandene Tabelle einfügen, wird diese automatisch ausgefüllt, ohne dass sie manuell ausgefüllt werden muss.
quelle
Vom Designer können Sie die Identität festlegen (1,1). Klicken Sie mit der rechten Maustaste auf tbl => desing => teilweise links (Rechtsklick) => properties => Wählen Sie in den Identitätsspalten #column aus
Eigenschaften
Identitätsspalte
quelle
Wenn Ihre Tabelle mit ihrem Primär- oder Foriegen-Schlüssel eine Beziehung zu anderen Tabellen hat, ist es möglicherweise unmöglich, Ihre Tabelle zu ändern. Sie müssen die Tabelle also löschen und erneut erstellen.
Um diese Probleme zu lösen, müssen Sie Skripte generieren, indem Sie mit der rechten Maustaste auf die Datenbank klicken und in der erweiterten Option den Datentyp auf Skript für Schema und Daten festlegen. Verwenden Sie anschließend dieses Skript, um Ihre Spalte zu ändern und die Tabelle mithilfe von run its query zu identifizieren und neu zu generieren.
Ihre Anfrage wird wie folgt sein:
quelle
Hier ist eine Idee, die Sie ausprobieren können. Originaltabelle - keine Identitätsspalte Tabelle1 Erstellen Sie eine neue Tabelle - rufen Sie Tabelle2 zusammen mit der Identitätsspalte auf. Kopieren Sie die Daten von Tabelle1 nach Tabelle2 - die Identitätsspalte wird automatisch mit automatisch inkrementierten Zahlen gefüllt.
Umbenennen der ursprünglichen Tabelle - Tabelle1 in Tabelle3 Umbenennen der neuen Tabelle - Tabelle2 in Tabelle1 (Originaltabelle) Jetzt haben Sie die Tabelle1 mit der Identitätsspalte eingeschlossen und für die vorhandenen Daten ausgefüllt. Nachdem Sie sichergestellt haben, dass kein Problem vorliegt und ordnungsgemäß funktioniert, lassen Sie die Tabelle3 fallen, wenn sie nicht mehr benötigt wird.
quelle
Erstellen Sie eine neue Tabelle mit unterschiedlichem Namen und denselben Spalten, Primärschlüssel- und Fremdschlüsselzuordnung und verknüpfen Sie diese in Ihrer Code-Anweisung Insert. Zum Beispiel: Für MITARBEITER durch MITARBEITER ersetzen.
Sie müssen jedoch entweder die vorhandene EMPLOYEE-Tabelle löschen oder einige Anpassungen gemäß Ihren Anforderungen vornehmen.
quelle
Diese Antwort ist eine kleine Ergänzung zur am höchsten bewerteten Antwort und funktioniert für SQL Server. Bei der Frage wurde ein Primärschlüssel für die automatische Inkrementierung angefordert. Die aktuelle Antwort fügt zwar den Primärschlüssel hinzu, ist jedoch nicht als automatische Inkrementierung gekennzeichnet. Das folgende Skript überprüft die Spalten und die Existenz und fügt sie mit aktiviertem Autoincrement-Flag hinzu.
quelle
quelle
alter table / ** füge den Namen des Tabals ein ** / add id int IDENTITY (1,1)
lösche aus / ** füge den Namen des Tabals ein ** / wo id in
(
Wählen Sie a.id FROM / ** Einfügen des Tabalennamens / als LEFT OUTER JOIN (SELECT MIN (id) als ID FROM / Einfügen des Tabalennamens / GROUP BY / Einfügen der Spalten c1, c2 .... ** /
WO t1.id NULL IST
)
alter table / ** füge den Namen des Tabals ein ** / DROP COLUMN id
quelle
Versuchen Sie so etwas (zuerst auf einem Testtisch):
Ich habe das überhaupt nicht getestet, also sei vorsichtig!
quelle
IDENTITY
Spalten) und würde sowieso nicht funktionieren.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
Sie können nicht einfach da reinschmeißenMAX
. Wo ist eineWHERE
Klausel, um zu vermeiden, dass dieselbe Zeile wiederholt aktualisiert wird?Dies funktioniert in MariaDB, daher kann ich nur hoffen, dass dies in SQL Server der Fall ist: Löschen Sie die soeben eingefügte ID-Spalte und verwenden Sie die folgende Syntax: -
ALTER TABLE Tabellenname ADD ID INT PRIMARY KEY AUTO_INCREMENT;
Keine Notwendigkeit für einen anderen Tisch. Dadurch wird einfach eine ID-Spalte eingefügt, zum Primärindex gemacht und mit sequentiellen Werten gefüllt. Wenn SQL Server dies nicht tut, entschuldige ich mich für die Verschwendung Ihrer Zeit.
quelle
ALTER TABLE Tabellenname ADD COLUMN ID INT NICHT NULL PRIMARY KEY AUTO_INCREMENT; Dies könnte nützlich sein
quelle