Frage zu IDENTITY_INSERT

20/01/2010 - 19:38 von Matthias Schuppe | Report spam
Hallo zusammen,

ich habe eine Tabelle mit einem IDENTITY-Feld, normalerweise werden
einzelne Datensàtze eingefügt.

Nun möchte ich per Stored Procedure einen ganzen Block an Daten
hinzufügen und dafür IDENTITY_INSERT auf ON setzen. Beispiel: der
aktuelle Identity-Wert liegt bei 10000, ich füge 100 Datensàtze ein
mit Identity-Werten von 10101 bis 10200.

In der Hilfe bin ich auf diesen Hinweis gestoßen: Wenn der
eingefügte Wert größer als der aktuelle Identitàtswert für die Tabelle
ist, verwendet SQL Server automatisch den neu eingefügten Wert als
aktuellen Identitàtswert.

Nun meine Frage: Was passiert wàhrend der Abarbeitung der genannten
Prozedur, wenn zeitgleich ein einzelner Datensatz eingefügt werden
soll? Gibt es dann eine Kollision? Oder bleibt für die andere
Connection Identity-màßig alles normal und der neue Datensatz würde
auf 10001 gesetzt?

Nach Abschluss der Prozedur müsste der nàchste einzeln eingefügte
Datensatz ja dann die 10201 verpasst bekommen.

Gruß,

Matthias
 

Lesen sie die antworten

#1 Willfried Faerber [MVP]
20/01/2010 - 20:02 | Warnen spam
Hallo Matthias,

wàhrend eines Inserts in eine Tabelle mit Identity Spalte wird auf die
Tabelle eine Sperre gesetzt, die verhindert, dass sich Sàtze reinschmuggeln
können. Das bedeutet, dass Inserts solange warten, bis dein Ladejob fertig
ist. Unter Umstànden kann dies auch zu einem Time Out - sprich Fehler bei
einzelnen Inserts führen. Nach Deinem IDENTITY_INSERT bekommt der nàchste
Satz der höher ist als der letzte geschriebe Satz. Wieviel höher hàngt von
Deinem Seekwert (Standardmàssig 1) ab.

Viele Grüsse
Willfried Fàrber

"Matthias Schuppe" wrote in message
news:
Hallo zusammen,

ich habe eine Tabelle mit einem IDENTITY-Feld, normalerweise werden
einzelne Datensàtze eingefügt.

Nun möchte ich per Stored Procedure einen ganzen Block an Daten
hinzufügen und dafür IDENTITY_INSERT auf ON setzen. Beispiel: der
aktuelle Identity-Wert liegt bei 10000, ich füge 100 Datensàtze ein
mit Identity-Werten von 10101 bis 10200.

In der Hilfe bin ich auf diesen Hinweis gestoßen: Wenn der
eingefügte Wert größer als der aktuelle Identitàtswert für die Tabelle
ist, verwendet SQL Server automatisch den neu eingefügten Wert als
aktuellen Identitàtswert.

Nun meine Frage: Was passiert wàhrend der Abarbeitung der genannten
Prozedur, wenn zeitgleich ein einzelner Datensatz eingefügt werden
soll? Gibt es dann eine Kollision? Oder bleibt für die andere
Connection Identity-màßig alles normal und der neue Datensatz würde
auf 10001 gesetzt?

Nach Abschluss der Prozedur müsste der nàchste einzeln eingefügte
Datensatz ja dann die 10201 verpasst bekommen.

Gruß,

Matthias

Ähnliche fragen