Benutzer mit den meisten Antworten
Wie kann ich eine Spalte nachträglich als Identity machen.

Frage
-
Hallo NG,
ich habe mit dem SQL-Server Management eine Datenbank per Daten importieren vom SQL-Server 2008 nach SQL-Server 2016 importiert.
Bei einer Tabelle ist die Spalte zwar übernommen nur ist Sie nicht als Identity eigetragen.
Wie kann ich bei einer bestehenden Tabelle die Identity nachträglich setzen. Ich muss die bestehenden Werte behalten weil Tabellen darauf zugreifen.
Danke im voraus für jeden Hinweis und Tipp.
Ingo
Antworten
-
Hallo Ingo,
hier mal ein Walk Through. Ist nur eine Möglichkeit. Alternativ kannst Du die Daten ja auch in eine neue Tabelle laufen lassen und die anschließend umbenennen. Aber damit erhöhst Du das Transaktionsvolumen...
-- Anlegen einer Tabelle OHNE Identity CREATE TABLE dbo.demo_table ( Id int NOT NULL, C1 CHAR(100) NOT NULL DEFAULT ('Test') -- Bei Constraints wird es etwas komplizierter als -- mit einem Index! CONSTRAINT pk_demo_table PRIMARY KEY CLUSTERED (Id) ); GO SET NOCOUNT ON; GO -- Testdaten eintragen INSERT INTO dbo.demo_table WITH (TABLOCK) (Id, C1) SELECT ROW_NUMBER() OVER (ORDER BY message_id), CAST(text AS CHAR(100)) FROM sys.messages WHERE language_id = 1033; GO -- Schritt 1: Anlegen eines neuen Attributs ALTER TABLE dbo.demo_table ADD new_Id INT NOT NULL IDENTITY (1, 1); GO -- Löschen der alten ID und Umbenennen von new_id ALTER TABLE dbo.demo_table DROP CONSTRAINT pk_demo_table; GO ALTER TABLE dbo.demo_table DROP COLUMN [Id]; GO -- Umbenennen der bestehenden Spalte EXEC sp_rename N'dbo.demo_table.new_id', N'id', N'COLUMN'; GO ALTER TABLE dbo.demo_table ADD CONSTRAINT pk_demo_table PRIMARY KEY CLUSTERED (Id); GO SELECT * FROM dbo.demo_table; GO
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only)- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 12:06
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 08:36
-
Hallo Ingo,
es ist nicht möglich, bei einer vorhandenen Spalte diese mit der Identity Eigenschaft zu versehen; siehe ALTER TABLE (Transact-SQL) => ALTER COLUMN Optionen; Datentypen & Nullable & Collation kann man ändern, Identity nicht.
So arbeitet der Import/Export Wizard, er übernimmt nur die platte Tabellendefinition, aber keine erweiterten Eigenschaft und auch nicht so was wie Primary Key, Indizes oder Statistiken.
Am besten die Tabelle vorher so anlegen, wie man sie braucht und erst danach Daten importieren; im Wizard gibt es die Option, das Identity Werte beim Import beibehalten werden.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 12:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 08:36
Alle Antworten
-
Hallo Ingo,
es ist nicht möglich, bei einer vorhandenen Spalte diese mit der Identity Eigenschaft zu versehen; siehe ALTER TABLE (Transact-SQL) => ALTER COLUMN Optionen; Datentypen & Nullable & Collation kann man ändern, Identity nicht.
So arbeitet der Import/Export Wizard, er übernimmt nur die platte Tabellendefinition, aber keine erweiterten Eigenschaft und auch nicht so was wie Primary Key, Indizes oder Statistiken.
Am besten die Tabelle vorher so anlegen, wie man sie braucht und erst danach Daten importieren; im Wizard gibt es die Option, das Identity Werte beim Import beibehalten werden.
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 12:08
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 08:36
-
Hallo Ingo,
hier mal ein Walk Through. Ist nur eine Möglichkeit. Alternativ kannst Du die Daten ja auch in eine neue Tabelle laufen lassen und die anschließend umbenennen. Aber damit erhöhst Du das Transaktionsvolumen...
-- Anlegen einer Tabelle OHNE Identity CREATE TABLE dbo.demo_table ( Id int NOT NULL, C1 CHAR(100) NOT NULL DEFAULT ('Test') -- Bei Constraints wird es etwas komplizierter als -- mit einem Index! CONSTRAINT pk_demo_table PRIMARY KEY CLUSTERED (Id) ); GO SET NOCOUNT ON; GO -- Testdaten eintragen INSERT INTO dbo.demo_table WITH (TABLOCK) (Id, C1) SELECT ROW_NUMBER() OVER (ORDER BY message_id), CAST(text AS CHAR(100)) FROM sys.messages WHERE language_id = 1033; GO -- Schritt 1: Anlegen eines neuen Attributs ALTER TABLE dbo.demo_table ADD new_Id INT NOT NULL IDENTITY (1, 1); GO -- Löschen der alten ID und Umbenennen von new_id ALTER TABLE dbo.demo_table DROP CONSTRAINT pk_demo_table; GO ALTER TABLE dbo.demo_table DROP COLUMN [Id]; GO -- Umbenennen der bestehenden Spalte EXEC sp_rename N'dbo.demo_table.new_id', N'id', N'COLUMN'; GO ALTER TABLE dbo.demo_table ADD CONSTRAINT pk_demo_table PRIMARY KEY CLUSTERED (Id); GO SELECT * FROM dbo.demo_table; GO
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only)- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 14. November 2016 12:06
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 25. November 2016 08:36
-
Hallo Uwe
ja so habe ich es auch gemacht.
Danke für den Tipp
Guten Morgen Ingo,
dann sei doch so gut und markiere die Einträge, die Dir geholfen haben, als [Antwort]. Das hat zwei Vorteile:
- der Thread wird als "beantwortet" markiert und die Leute, die hier freiwillig helfen, müssen nicht mehr in den Thread schauen (ist ja gelöst)
- diejenigen, dessen Meldung Du als Antwort markierst, wissen, dass sie helfen konnten.
Vielen Dank...
Uwe Ricken (Blog | Twitter)
Microsoft Certiied Master - SQL Server 2008
Microsoft Certified Solution Master - CHARTER Data Platform
Microsoft Certified Solution Expert - Data Platform
db Berater GmbH
Microsoft SQL Server Blog (german only)