Forums Neueste Beiträge
 

Wie kann man nach Fehlermeldung die ID anpassen

31/10/2007 - 16:36 von Frank M. | Report spam
Ich habe leider noch nicht soviel Ahnng vom SQL-Server, habe aber folgendes
Problem:
Wenn ich im SQL Server 2005 in der Datenbank einen Datensatz eingebe, und
ich eine Fehlerhafte Eingabe gemacht habe, übernimmt der SQL-Server den
Datensatz nicht und gibt statt dessen eine Fehlermeldung aus.

Wenn ich dann die Eingabe verbessere, nimmt der SQL-Server zwar den
Datensatz an, aber die ID (Primàrschlüssel) springt eins weiter.

Beispiel:
Ich habe mit der ID 87 einen Datensatz eingegeben, den SQL Server angenommen
hat.

Jetzt gebe ich einen neuen Datensatz ein, der normalerweise die ID 88 hàtte.
Durch einen Fehler bei der Eingabe, nimmt SQLServer den Datensatz aber nicht
an (Fehlermeldung). Wenn ich dann den Fehler im Datensatz ausbessere, nimmt
er den Datensatz zwar an, aber die ID springt auf 89. D.h. nach 87 folgt 89.
Die ID 88 fehlt.

Was kann ich machen, das ich eine fortlaufende ID habe. Ich würde gerne die
ID 89 auf 88 àndern oder ich hàtte gern, das der folgende Datensatz die 88
hat.

Ist dieses überhaupt möglich?

Ich hoffe, ich habe mich einigermassen kar ausgedrückt und bedanke mich
schon im voraus für die Hilfe.

Frank
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
31/10/2007 - 19:05 | Warnen spam
Hallo Frank,

"Frank M." schrieb

Wenn ich dann den Fehler im Datensatz ausbessere, nimmt
er den Datensatz zwar an, aber die ID springt auf 89. D.h. nach 87 folgt 89.
Die ID 88 fehlt.



Korrekt. Und bei IDENTITY wird das auch so bleiben. Für eine einmalige Sache
könnte man DBCC CHECKIDENT mit dem Argument RESEED verwenden, siehe:

http://msdn2.microsoft.com/de-de/li...76057.aspx

Für eine kontinuierliche Vergabe fortlaufender IDs (was machst Du eigentlich,
wenn man ein Datensatz gelöscht wird?) ist das nicht zu empfehlen.

Was kann ich machen, das ich eine fortlaufende ID habe. Ich würde gerne die
ID 89 auf 88 àndern oder ich hàtte gern, das der folgende Datensatz die 88
hat.



Du kannst Deine IDs auch selbst vergeben. Dafür müsstest Du bei der entsprechenden
Spalte das Attribut IDENTITY entfernen. Danach dann bspw. vor Ausführen des INSERT
Statements die hàchste vergebene ID auslesen, den Wert inkrementieren und dann
in die Datenbank schreiben. Allerdings musst Du dich dabei dann auch selbst um
Sperren, ... kümmern, da es bei zu kurzen Abstànden zwischen den Inserts vorkommen
kann, dass IDs doppelt vergeben würden.

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen