Heim >Datenbank >MySQL-Tutorial >Was sind die Unterschiede zwischen „SCOPE_IDENTITY()', „IDENTITY()', „@@IDENTITY' und „IDENT_CURRENT()' in SQL Server?

Was sind die Unterschiede zwischen „SCOPE_IDENTITY()', „IDENTITY()', „@@IDENTITY' und „IDENT_CURRENT()' in SQL Server?

DDD
DDDOriginal
2025-01-20 12:46:09422Durchsuche

What are the differences between `SCOPE_IDENTITY()`, `IDENTITY()`, `@@IDENTITY`, and `IDENT_CURRENT()` in SQL Server?

Umfassendes Verständnis der Funktionen SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY und IDENT_CURRENT() in SQL Server

Die vier Funktionen

SCOPE_IDENTITY(), IDENTITY(), @@IDENTITY und IDENT_CURRENT() werden alle zum Abrufen von automatisch inkrementierten Spaltenwerten in SQL Server verwendet, ihre Verwendung ist jedoch unterschiedlich. Lassen Sie uns in ihre Unterschiede eintauchen.

SCOPE_IDENTITY()

SCOPE_IDENTITY()Rufen Sie den zuletzt eingefügten Auto-Inkrement-Spaltenwert im aktuellen Bereich ab, bei dem es sich um die aktuelle Anweisung oder den aktuellen Stapel handeln kann. Die automatische Inkrementierung von Spaltenwerten, die in anderen Bereichen innerhalb derselben Sitzung generiert wurden, wird nicht berücksichtigt.

IDENTITY()

Im Gegensatz zum Namen wird IDENTITY() nicht zum Abrufen automatisch inkrementierender Spaltenwerte verwendet. Es wird in SELECT...INTO-Anweisungen verwendet, um automatisch inkrementierende Spalten zu erstellen, wenn eine neue Tabelle aus Daten in einer anderen Tabelle abgeleitet wird.

@@IDENTITY

@@IDENTITYRuft den zuletzt eingefügten Auto-Inkrement-Spaltenwert in der aktuellen Sitzung ab, unabhängig von seinem Bereich. Dies bedeutet, dass es automatisch inkrementierende Spaltenwerte enthält, die im aktuellen Bereich und in anderen Bereichen während derselben Sitzung generiert wurden.

IDENT_CURRENT()

IDENT_CURRENT() ist eine weniger genutzte Funktion, die dazu dient, den zuletzt eingefügten Wert einer automatisch inkrementierten Spalte in einer bestimmten Tabelle oder Ansicht abzurufen, auch sitzungsübergreifend.

Wann soll die jeweilige Funktion verwendet werden?

Im Allgemeinen wird SCOPE_IDENTITY() bevorzugt, da es eine Isolierung innerhalb des aktuellen Bereichs bietet. Wenn Sie auf einen automatisch inkrementierenden Spaltenwert verweisen müssen, der in einer übergeordneten Anweisung oder gespeicherten Prozedur im selben Bereich generiert wurde, stellt SCOPE_IDENTITY() dessen Genauigkeit sicher.

@@IDENTITYNützlich beim Zugriff auf automatisch inkrementierte Spaltenwerte, die in anderen Bereichen innerhalb der Sitzung generiert wurden. Sie können es beispielsweise in einem Trigger- oder Batch-Job verwenden, wenn mehrere Vorgänge in derselben Sitzung ausgeführt werden.

IDENT_CURRENT() wird hauptsächlich in Szenarien verwendet, in denen Sie über mehrere Sitzungen hinweg auf automatisch inkrementierte Spaltenwerte in einer bestimmten Tabelle zugreifen müssen, beispielsweise beim Verbinden von Daten aus verschiedenen Datenquellen.

Beispiel:

Bedenken Sie den folgenden Codeausschnitt:

<code class="language-sql">-- 向'Customers'表插入一条记录
INSERT INTO Customers (Name) VALUES ('John Doe');

-- 检索当前语句中生成的自增列值
SELECT SCOPE_IDENTITY();

-- 触发器触发并插入另一条记录
CREATE TRIGGER InsertAudit ON Customers
AFTER INSERT
AS
    INSERT INTO AuditLog (CustomerId, Action)
    VALUES (@@IDENTITY, 'INSERT');

-- 检索触发器生成的自增列值
SELECT @@IDENTITY;</code>

In diesem Beispiel gibt SCOPE_IDENTITY() den automatisch inkrementierten Spaltenwert des in die Tabelle „Kunden“ eingefügten Datensatzes zurück, während @@IDENTITY den automatisch inkrementierten Spaltenwert zurückgibt, der vom Trigger nach dem Audit-Protokolleintrag erstellt wurde eingefügt wird. Dies zeigt, wie unterschiedliche Bereiche mit @@IDENTITY zu unterschiedlichen Ergebnissen führen können.

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen „SCOPE_IDENTITY()', „IDENTITY()', „@@IDENTITY' und „IDENT_CURRENT()' in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn