Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 12386|Antwort: 0

[Quelle] SqlServer implementiert die ID des neu eingefügten Datensatzes

[Link kopieren]
Veröffentlicht am 15.06.2016 11:45:40 | | |

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








Vorhergehend:SQLServer implementiert die universelle Methode der Aufteilung von Strings
Nächster:Teilen Sie ein nützliches Suchartefakt
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com