ooalbert
Goto Top

SQL Server 2008 - Auto Increment

Hi,

ich hab mal eine Frage zum Auto Increment im SQL Server 2008. Existiert die Möglichkeit eine bestehende Spalte nachträglich mit dieser Funktion zu versehen ohne das die bestehenden Inhalte der Spalte entfernt werden? Ich kenn das beispielsweise von Oracle, das man da ein Auto Increment definieren kann mit beliebigem Startwert und es da auch nicht relevant war was vorher in der Spalte stand oder steht.

Grüße

Content-ID: 193034

Url: https://administrator.de/contentid/193034

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

MadMax
MadMax 20.10.2012 um 02:19:52 Uhr
Goto Top
Hallo ooAlbert,

direkt mit einem "alter table" dürfte das nicht gehen (aber probieren kostet ja nichts). Was allerdingst gehen müßte:
1. zu ändernde Spalte umbenennen
2. neue Spalte anlegen mit dem alten Namen der zu ändernden Spalte und mit identity-Eigenschaft
3. mit "set identity_insert <Tabelle> on" die identity-Eigenschaft vorübergehend ausschalten
4. die Inhalte der alten, umbenannten Spalte in die neue Spalte kopieren
5. alte, umbenannte Spalte löschen
6. identity-Eigenschaft mit "set identity_insert <Tabelle> off" wieder einschalten
7. mit "dbcc checkident" den Identitätswert prüfen bzw. ggf. neu setzen

Gruß, Mad Max
ooAlbert
ooAlbert 29.10.2012 aktualisiert um 15:54:07 Uhr
Goto Top
Hi,

ich habe das durchgeführt, jedoch lässt mich der SQL Server nicht die Werte aus der alten Spalte in die neue übertragen und meldet "Meldung 8102".

Grüße
MadMax
MadMax 30.10.2012 um 13:14:45 Uhr
Goto Top
Moin,

hört sich an, als wäre die identity-Eigenschaft nicht ausgeschaltet.

Aber warum nicht den einfachsten Weg gehen, im Management Studio zur Tabelle, rechte Maustaste, Entwerfen und dann dort der betreffenden Spalte die identity-Eigenschaft geben. Funktioniert, habe ich eben mal probiert. Und weil Du die Frage überhaupt gestellt hast, bin ich davon ausgegangen, daß der einfachste Weg gar nicht klappt. Klappt aber doch face-smile

Gruß, Mad Max
ooAlbert
ooAlbert 30.10.2012 aktualisiert um 13:26:39 Uhr
Goto Top
Ich hab zwichenzeitlich folgendes probiert. Eine Kopie der Tabelle erzeugt und die Spalte direkt mit Identity versehen. Dann wollte ich sowas machen:


set identity_insert tabelle2 on

insert into [db].[dbo].[tabelle2]
(
[Spalte1]
,[Spalte2]

)
select
[Spalte1]
,[Spalte2]

from [db].[dbo].[tabelle]

set identity_insert tabelle2 off

Geht aber nicht.
Meldung 515, Ebene 16, Status 2, Zeile 3
Der Wert NULL kann in die Spalte1-Spalte, db.dbo.tabelle2-Tabelle nicht eingefügt werden. Die Spalte lässt NULL-Werte nicht zu. Fehler bei INSERT.
Die Anweisung wurde beendet.

Ein simples update tabelle set spalte1=spalte wurde ebenfalls verweigert. Wenn ich, wie vorgeschlagen die Spalte in der bestehenden Tabelle neu angelegt hätte.

Kann es sein, das die zu übertragende Splate lückenlos sein muss, dh. ein durchgehender Anfangs- bis Endwert?
MadMax
MadMax 30.10.2012 um 17:04:46 Uhr
Goto Top
Hallo ooAlbert,

ein durchgehender Wert ist nicht nötig, interessanterweise noch nicht mal Eindeutigkeit. Aber was unbedingt sein muß und bei Dir nicht der Fall ist, die Spalte darf keine NULL-Werte enthalten. Wenn Du alle NULL-Werte in der Spalte beseitigst, wird es wahrscheinlich funktionieren.

Gruß, Mad Max
ooAlbert
ooAlbert 30.10.2012 um 17:09:22 Uhr
Goto Top
Ich hab den "Fehler" gefunden, da meine Spalte nicht bei 1 losgeht aber ohne genauere Definition bei 1 begonnen wird entstehgen beim einfügen für den SQL Server sogesehen "NULL Werte". Gebe ich jetzt einen Startwert vor, was der kleinste Wert in der bisherigen Spalte wäre klappt das auf einmal und Lücken zwischendrin sind dann auch egal face-smile

Jedoch muss ich die Tabellen neuerzeugen und über den Insert Befehl befüllen.