SQL Server 中的 @@IDENTITY 是一个系统函数,用于返回最后插入的标识值。在完成 INSERT、INTO SELECT、BULK INSERT 或 SELECT INTO 语句后,您可以使用 @@IDENTITY 来查找最后生成的标识值。如果没有执行插入操作,它将返回 NULL。
如何编写或使用 @@IDENTITY 查询来提取标识值?我们将通过以下表数据进行演示。

我们创建以下 SQL 表来插入数据。
CREATE TABLE [dbo].[EmployeeDuplicates]( [EmpID] [int] IDENTITY(1,1) NOT NULL, [FirstName] [nvarchar](255) NULL, [LastName] [nvarchar](255) NULL, [Education] [nvarchar](255) NULL, [Occupation] [nvarchar](255) NULL, [YearlyIncome] [float] NULL, [Sales] [float] NULL, [HireDate] [datetime] NULL, CONSTRAINT [PK_EmployeeDuplicates_EmpID] PRIMARY KEY CLUSTERED ( [EmpID] ASC ) )
SQL Server @@IDENTITY 示例
在此示例中,我们首先将四个随机记录加载到 Employee Duplicates 表中。然后,我们将使用 @@IDENTITY 提取最后插入的标识值。
让我使用 INSERT 语句 向表中插入一个值。
INSERT INTO [dbo].[EmployeeDuplicates]
([FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate])
VALUES
('Tutorial', 'Gateway', 'Masters','Admin', 92500, 3200, '2006-01-28 13:10:02.047'),
('Steve', 'Lara', 'Graduate', 'Software Developer', 19500, 1200, '2012-04-28 13:10:02.047'),
('Jack', 'Smith', 'Graduate', 'Manager', 25000, 150.45, '2015-05-26 13:12:02.047' ),
('Ramesh', 'Kumar', 'Post Graduate', 'Sales Manager', 75000, 240.89, '2016-04-18 13:10:02.047')
GO
SELECT @@IDENTITY AS [Last Identity Value]
GO
SELECT MAX(EmpID) AS [Maximum Identity Value]
FROM [EmployeeDuplicates]
GO

我将向您展示我们放入 Employee Duplicates 表中的数据

在此示例中,我们首先将使用 INSERT、INSERT INTO SELECT 将记录从 Employee 表插入到 Employee Duplicates 表中。
接下来,我们将使用 @@IDENTITY 提取最后插入的标识值。
INSERT INTO [EmployeeDuplicates] ( [FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate]) SELECT [FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate] FROM [Employee] AS Emp WHERE Emp.EmpID > 4 GO SELECT @@IDENTITY AS [Last Identity Value] GO SELECT MAX(EmpID) AS [Maximum Identity Value] FROM [EmployeeDuplicates] GO

我将向您展示我们放入 Employee Duplicates 表中的数据

@@IDENTITY 示例 3
在此 SQL @@IDENTITY 示例中,我们首先将展示如果 Insert 语句因某种原因失败会发生什么。为了演示这一点,我们将故意让加载操作失败。
INSERT INTO [dbo].[EmployeeDuplicates]
([FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate])
VALUES
('Tutorial Gateway', 'Website', 'Programming','Student', 2000, '2006-01-28 13:10:02.047')
GO
SELECT @@IDENTITY AS [Last Identity Value]
GO
SELECT MAX(EmpID) AS [Maximum Identity Value]
FROM [EmployeeDuplicates]
GO

我将向您展示我们加载到 Employee Duplicates 表中的数据。正如您所见,它(最后一个标识值)返回了 NULL 值。
