SQL Server SCOPE_IDENTITY() 函数使用指南

在 SQL Server 中, SCOPE_IDENTITY() 函数用于返回最近插入到当前范围内的标识列的值。它只适用于插入数据时使用标识列的情况。 SCOPE_IDENTITY() 函数返回一个具有数值数据类型的单个值。如果没有在当前范围内插入任何行,则返回 null。

语法

以下是 SCOPE_IDENTITY() 函数的语法:

SCOPE_IDENTITY ( )

使用场景

在一个 SQL 语句中,如果需要获取刚刚插入的自增长字段的值,可以使用 SCOPE_IDENTITY() 函数。与 IDENT_CURRENT() 函数不同, SCOPE_IDENTITY() 函数仅返回当前作用域内最新插入数据的自增长字段的值,而不是特定表的当前值。

使用 SCOPE_IDENTITY() 函数可以确保返回正确的标识列值,即使在高并发情况下也能保持准确性。

示例

假设我们有一个包含自增长字段的 Customers 表,我们需要插入一行数据并返回最新插入数据的自增长字段的值。以下是示例:

CREATE TABLE Customers (
  id INT IDENTITY(1,1) PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(50)
);

INSERT INTO Customers (name, email)
VALUES ('John', '[email protected]');

SELECT  `SCOPE_IDENTITY()`  AS LatestId;

结果:

LatestId
1

假设有两个用户同时执行插入数据的操作,以下是示例:

用户 1 执行以下操作:

INSERT INTO Customers (name, email)
VALUES ('Amy', '[email protected]');

用户 2 执行以下操作:

INSERT INTO Customers (name, email)
VALUES ('Bob', '[email protected]');

此时,如果用户 1 使用 SCOPE_IDENTITY() 函数获取最新插入数据的自增长字段的值,得到的是自己插入的数据的自增长字段的值;如果用户 2 使用 SCOPE_IDENTITY() 函数获取最新插入数据的自增长字段的值,也得到的是自己插入的数据的自增长字段的值。

结论

在 SQL Server 中, SCOPE_IDENTITY() 函数用于返回最近插入到当前范围内的标识列的值。它只适用于插入数据时使用标识列的情况。使用 SCOPE_IDENTITY() 函数可以确保返回正确的标识列值,即使在高并发情况下也能保持准确性。