SQL @@IDENTITY

SQL Server 中的 @@IDENTITY 是一个系统函数,用于返回最后插入的标识值。在完成 INSERT、INTO SELECT、BULK INSERTSELECT INTO 语句后,您可以使用 @@IDENTITY 来查找最后生成的标识值。如果没有执行插入操作,它将返回 NULL。

如何编写或使用 @@IDENTITY 查询来提取标识值?我们将通过以下表数据进行演示。

Employee Table 0

我们创建以下 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
SQL Insert records into table and select @@IDENTITY 1

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

Newly Inserted records in a table 2

在此示例中,我们首先将使用 INSERTINSERT 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
Extract last inserted value 3

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

View Table rows 4

@@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
Error Msg 109. Values should match 5

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

@@IDENTITY 6