SQL Server IDENTITY() 函数使用指南

在 SQL Server 中,@@IDENTITY 是一个系统变量,用于返回最近插入的行的标识列值。它是在执行插入操作之后返回的,并且仅返回当前会话的标识列值。如果多个行被插入,只有最后插入行的标识列值被返回。

语法

@@IDENTITY 的语法非常简单,只需要在 SQL 查询中使用它即可。如下所示:

SELECT @@IDENTITY;

使用场景

@@IDENTITY 可以在许多不同的场景中使用。以下是一些常见的使用场景:

  • 在插入数据后需要获取标识列值时,可以使用@@IDENTITY
  • 如果使用存储过程执行插入操作并需要返回标识列值,则可以将该值存储在一个输出参数中。

示例

以下是两个使用 @@IDENTITY 的示例:

示例 1:获取最近插入行的标识列值

假设我们有一个名为 Employees 的表格,其中包含以下列:

  • EmployeeID - 标识列
  • FirstName - 名字
  • LastName - 姓氏
  • Title - 职称

我们可以使用以下查询向该表格中插入新行,并使用 @@IDENTITY 返回最近插入行的标识列值:

INSERT INTO Employees (FirstName, LastName, Title)
VALUES ('John', 'Doe', 'Manager');

SELECT @@IDENTITY;

运行以上查询后,@@IDENTITY 将返回新行的 EmployeeID 值。

示例 2:使用存储过程获取标识列值

假设我们有一个存储过程,用于向 Employees 表格中插入新行,并需要返回新行的标识列值。我们可以将该值存储在一个输出参数中,如下所示:

CREATE PROCEDURE InsertEmployee
    @FirstName nvarchar(50),
    @LastName nvarchar(50),
    @Title nvarchar(50),
    @EmployeeID int OUTPUT
AS
BEGIN
    INSERT INTO Employees (FirstName, LastName, Title)
    VALUES (@FirstName, @LastName, @Title);

    SET @EmployeeID = @@IDENTITY;
END;

然后,我们可以使用以下查询调用该存储过程,并检查输出参数以获取新行的标识列值:

DECLARE @NewEmployeeID int;

EXEC InsertEmployee 'Jane', 'Doe', 'Salesperson', @NewEmployeeID OUTPUT;

SELECT @NewEmployeeID;

运行以上查询后,@NewEmployeeID 将包含新行的 EmployeeID 值。

结论

在 SQL Server 中,@@IDENTITY 可以帮助我们获取最近插入行的标识列值,从而方便地进行后续操作。但是,需要注意的是,它只返回当前会话的标识列值,并且只返回最后插入行的标识列值。