Wert für Identity Insert manuell setzen

15. Juli 2010

Im SQL Server gibt es die Möglichkeit, für eine Spalte das Property Identity auf TRUE zu setzen. Dies bewirkt, dass beim Einfügen eines Datensatzes für diese Spalte automatisch ein Wert erzeugt wird. In der Regel geschieht dies durch einfaches Hochzählen eines internen Zählers.

Oftmals ist es notwendig, für eine Identity-Spalte einen festen Wert zu setzen, das heißt kein durch das identity_insert automatisch generierter Wert. Dies kann z.B. bei einem Dimensionseintrag für “Unknown”-Elemente der Fall sein, dem man sinnvollerweise den Wert -1 zuweisen könnte. Ein anderes Beispiel ist das skriptbasierte Erzeugen von Testdaten. Ist eine Spalte aber als Identity-Spalte gekennzeichnet, so kann nicht ohne Weiteres ein Wert für diese gesetzt werden, da dieser vom SQL Server automatisch erzeugt wird. Der SQL Server meldet in diesem Fall einen Fehler.

Um diese Spalte doch setzen zu könenn, muss zunächst das Property identity_insert eingeschaltet werden:

Nun kann man mittels INSERT-statement den Wert für die Identity-Spalte direkt mitgeben.

   1: set identity_insert dbo.DimCustomer on;

Eine weitere sehr nützliche Funktion ist das Setzen des Identity-Startwerts, d.h. der Wert von dem aus hochgezählt wird, wenn neue Datensätze eingefügt werden:

   1: DBCC CHECKIDENT (dbo.DimCustomer, RESEED, 10);

Der nächste Eintrag bekäme hier den Wert 11 für die Identity-Spalte. Um den aktuellen Wert zu überprüfen gibt es ebenfalls eine Funktion:

   1: DBCC CHECKIDENT (dbo.DimCustomer, NORESEED);