IDENTITY(函数)(Transact-SQL)

适用于:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric中的仓库Microsoft Fabric中的SQL数据库

IDENTITY仅在带有SELECT子句的语句中用于将身份列插入新表。 虽然相似,但 IDENTITY 函数并非 IDENTITYCREATE TABLEALTER TABLE和 时所用的性质。

注意

要创建一个可在多个表中使用的自动递增数字或者可以从应用程序中调用而不引用任何表的自动递增数字,请参阅序列号

Transact-SQL 语法约定

语法

IDENTITY (data_type [ , seed , increment ] ) AS column_name  

参数

data_type

身份列的数据类型。 标识列的有效数据类型可以是任何整数数据类型类别的数据类型(bit 数据类型除外),也可以是 decimal 数据类型

seed

将整数值分配给表中第一行。 为每一个后续行分配下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。 如果既没有指定 seed,也没有指定 increment,那么它们都默认为 1

increment

整数值,用于为表中连续行的 种子 值加到。

column_name

要插入到新表格中的列名。

返回类型

返回与 data_type 相同的数据类型

注解

因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:

--(1)  
SELECT IDENTITY(int, 1,1) AS ID_Num  
INTO NewTable  
FROM OldTable;  

--(2)  
SELECT ID_Num = IDENTITY(int, 1, 1)  
INTO NewTable  
FROM OldTable;  

在Fabric数据仓库中,你无法指定 seedincrement,因为这些值会自动管理,提供唯一的整数。 BIGINT IDENTITY 是语句中列定义 CREATE TABLE 所需的全部条件。 更多信息请参见Fabric数据仓库中的创建表(CREATE TABLE,(Transact-SQL)、身份(Property)和身份。

示例

以下示例将AdventureWorks2025数据库中该表的所有行 Contact 插入到一个名为 NewContact的新表中。 该 IDENTITY 函数用于在表格中从100 NewContact 开始识别号码,而不是1。

USE AdventureWorks2022;  
GO  
IF OBJECT_ID (N'Person.NewContact', N'U') IS NOT NULL  
    DROP TABLE Person.NewContact;  
GO  
ALTER DATABASE AdventureWorks2022 SET RECOVERY BULK_LOGGED;  
GO  
SELECT  IDENTITY(smallint, 100, 1) AS ContactNum,  
        FirstName AS First,  
        LastName AS Last  
INTO Person.NewContact  
FROM Person.Person;  
GO  
ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL;  
GO  
SELECT ContactNum, First, Last FROM Person.NewContact;  
GO