Quelle: Internet-Autor: Unbekannt
- Datenbanken und Tabellen erstellen
Datenbank erstellen MyDataBase
verwenden Sie MyDataBase
Tabelle erstellen, mytable
id int identity(1,1),
Name Varchar(20)
)
--Führe dieses SQL aus, um den Wert der selbstinkrementellen Spalte zu ermitteln, die dem gerade eingefügten Datensatz entspricht
in mytable-Werte einfügen ('Li Si')
Wählen Sie @@identity
2. Vergleich der drei Methoden
In SQL Server 2000 gibt es drei ähnliche Funktionen: SCOPE_IDENTITY, IDENT_CURRENT und @@IDENTITY, die alle Werte zurückgeben, die in die IDENTITY-Spalte eingefügt wurden.
IDENT_CURRENT Gibt den zuletzt generierten Identifikationswert für eine bestimmte Tabelle in jeder Sitzung und jedem Scope zurück. IDENT_CURRENT Nicht durch Umfang und Sitzung begrenzt, sondern durch eine festgelegte Tabelle. IDENT_CURRENT Gibt den für eine bestimmte Tabelle in jeder Sitzung und jedem Scope erzeugten Wert zurück.
@@IDENTITY Gibt den zuletzt generierten Identifikationswert für eine beliebige Tabelle in allen Scopes der aktuellen Sitzung zurück.
SCOPE_IDENTITY Gibt den zuletzt identifizierten Wert zurück, der für die aktuelle Sitzung und jede Tabelle im aktuellen Umfang erzeugt wurde.
SCOPE_IDENTITY und @@IDENTITY geben den letzten Identifikationswert zurück, der in einer beliebigen Tabelle in der aktuellen Sitzung erzeugt wurde. Allerdings gibt SCOPE_IDENTITY nur Werte zurück, die in den aktuellen Bereich eingefügt wurden; @@IDENTITY Nicht auf einen bestimmten Umfang beschränkt.
Zum Beispiel gibt es zwei Tabellen, T1 und T2, auf denen ein INSERT-Trigger definiert ist. Wenn eine Reihe in T1 eingefügt wird, wird der Trigger ausgelöst und eine Reihe wird in T2 eingefügt. Dieses Beispiel zeigt zwei Scopes: eines auf T1 und eines auf T2 als Folge des Triggers.
Angenommen, sowohl T1 als auch T2 haben IDENTITY-Spalten, geben @@IDENTITY und SCOPE_IDENTITY am Ende der INSERT-Anweisung auf T1 unterschiedliche Werte zurück.
@@IDENTITY Gibt den zuletzt in einen beliebigen Scope der aktuellen Sitzung eingefügten IDENTITY-Spaltenwert zurück, also den in T2 eingefügten Wert.
SCOPE_IDENTITY() gibt den in T1 eingefügten IDENTITY-Wert zurück, der der letzte INSERT ist, der im selben Bereich aufgetreten ist. Wenn die Funktion SCOPE_IDENTITY() aufgerufen wird, bevor die Einfügungsanweisung in die Identitätsspalte im Scope erfolgt, gibt die Funktion einen NULL-Wert zurück.
Die von IDENT_CURRENT('T1') und IDENT_CURRENT('T2') zurückgegebenen Werte sind die letzten selbstinkrementellen Werte der beiden Tabellen.
ajqc-Experiment: (40 lokale Threads, 40+40 entfernte Threads gleichzeitig gleichzeitiger Test, Einfügung von 1200W Zeilen), lautet das Fazit:
1. In typischen Kaskadenanwendungen. @@IDENTITY kann nicht verwendet werden, und es treten gleichzeitig Konflikte auf, wenn 1W auf CII850- und 256M-SD-Rechnern mehrreihig ist. Auf P42.8C und 512M DDR gibt es einen gleichzeitigen Konflikt, bei dem es nur mehr als 6000 Leitungen gibt.
2.SCOPE_IDENTITY() ist absolut zuverlässig und kann im Speicherprozess verwendet werden, selbst Trigger müssen nicht gebaut werden, und es gibt keine gleichzeitigen Konflikte
SELECT IDENT_CURRENT('TableName') – Gibt den zuletzt in der angegebenen Tabelle generierten Labelwert zurück
SELECT IDENT_INCR('TableName') – gibt den markierten Feld-Inkrementwert für die angegebene Tabelle zurück
SELECT IDENT_SEED('TableName') – gibt den markierten Feldseed der angegebenen Tabelle zurück
Gibt die automatische Nummer des zuletzt eingefügten Datensatzes zurück
SELECT IDENT_CURRENT('TableName')
Kehren Sie zur nächsten automatischen Zahl zurück:
SELECT IDENT_CURRENT('TableName')+(SELECT IDENT_INCR('TableName'))
SELECT @@IDENTITY – Gibt den zuletzt markierten Wert zurück, der in allen Tabellen der aktuellen Sitzung generiert wurde
|