Heim >Datenbank >MySQL-Tutorial >Was sind die Unterschiede zwischen „SCOPE_IDENTITY()', „IDENTITY()', „@@IDENTITY' und „IDENT_CURRENT()' in SQL Server?
SCOPE_IDENTITY()
, IDENTITY()
, @@IDENTITY
und IDENT_CURRENT()
in SQL ServerSCOPE_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
@@IDENTITY
Ruft 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.
@@IDENTITY
Nü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!