SQL Server Identity Column (ID) Manipulieren
Gepriesen sei Das Rauhe Haus,
Eine Microsoft SQL Datenbank ist kaputt gegangen und konnte mit DBCC wieder zum laufen gebracht. Stichwort REPAIR_ALLOW_DATA_LOSS, nun möchte ich den einzigen verlorenen Eintrag wiederherstellen. Die ID ist jedoch automatisch Generiert. Es MUSS aber die ID 3 sein. Alle verwandten Einträge aus Beziehungen sind noch vorhanden und verweisen auf eben diesen Eintrag. Dies führt in übrigen auch dazu das die Software hängt.
Den Eintrag könnte ich mit Visual Studio manuell neu erstellen. Jedoch generiert der SQL Server in diesen Fall einfach eine neue ID. Die Idee das automatische generieren einer ID vorübergehend abzuschalten erfordert in MSSQL Managmand Studio das komplette neu erstellen der Tabelle was nicht geht weil dann auch alle restlichen Daten weg sind, und Visual Studio geht in ein Timeout wenn ich die Änderungen an der DB abspeichern will. In Visual Studio 2010 habe ich einfach die Eigenschaft Identitätsspezifikation (Is Identity) auf Nein (False) gestellt was es mir erlaubt das Feld manuell zu editieren und wenn alles wieder beim alten ist alles wieder auf Ja (True) zurück zu setzen und die Datenbank wäre somit wieder OK.
Hoffe wir können die Lösung zusammen finden.
Also in dem Sinne Danke im Vorraus und Gruß an die IT Welt
LG, J Herbrich
Eine Microsoft SQL Datenbank ist kaputt gegangen und konnte mit DBCC wieder zum laufen gebracht. Stichwort REPAIR_ALLOW_DATA_LOSS, nun möchte ich den einzigen verlorenen Eintrag wiederherstellen. Die ID ist jedoch automatisch Generiert. Es MUSS aber die ID 3 sein. Alle verwandten Einträge aus Beziehungen sind noch vorhanden und verweisen auf eben diesen Eintrag. Dies führt in übrigen auch dazu das die Software hängt.
Den Eintrag könnte ich mit Visual Studio manuell neu erstellen. Jedoch generiert der SQL Server in diesen Fall einfach eine neue ID. Die Idee das automatische generieren einer ID vorübergehend abzuschalten erfordert in MSSQL Managmand Studio das komplette neu erstellen der Tabelle was nicht geht weil dann auch alle restlichen Daten weg sind, und Visual Studio geht in ein Timeout wenn ich die Änderungen an der DB abspeichern will. In Visual Studio 2010 habe ich einfach die Eigenschaft Identitätsspezifikation (Is Identity) auf Nein (False) gestellt was es mir erlaubt das Feld manuell zu editieren und wenn alles wieder beim alten ist alles wieder auf Ja (True) zurück zu setzen und die Datenbank wäre somit wieder OK.
Hoffe wir können die Lösung zusammen finden.
Also in dem Sinne Danke im Vorraus und Gruß an die IT Welt
LG, J Herbrich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2726250683
Url: https://administrator.de/forum/sql-server-identity-column-id-manipulieren-2726250683.html
Ausgedruckt am: 22.12.2024 um 14:12 Uhr
5 Kommentare
Neuester Kommentar
Hier kann man OVERRIDING SYSTEM VALUE nutzen:
Vielleicht hilft es ja. Davon abgesehen sind Deine Daten jetzt nicht konsistent. Ich würde eher auf ein Backup zurückgreifen.
postgres=# create table herbrich19(id int generated always as identity primary key, data text);
CREATE TABLE
postgres=# insert into herbrich19 (data) values ('line 1');
INSERT 0 1
postgres=# insert into herbrich19 (data) values ('line 2');
INSERT 0 1
postgres=# insert into herbrich19 (data) values ('line 3');
INSERT 0 1
postgres=# insert into herbrich19 (data) values ('line 4');
INSERT 0 1
postgres=# select * from herbrich19;
id | data
----+--------
1 | line 1
2 | line 2
3 | line 3
4 | line 4
(4 rows)
postgres=# delete from herbrich19 where id = 3;
DELETE 1
postgres=# insert into herbrich19 values (3, 'line 3');
ERROR: cannot insert a non-DEFAULT value into column "id"
DETAIL: Column "id" is an identity column defined as GENERATED ALWAYS.
HINT: Use OVERRIDING SYSTEM VALUE to override.
postgres=# insert into herbrich19 overriding system value values (3, 'line 3');
INSERT 0 1
postgres=#
Vielleicht hilft es ja. Davon abgesehen sind Deine Daten jetzt nicht konsistent. Ich würde eher auf ein Backup zurückgreifen.