IDENTITY(函数)(Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

只用于在带有 INTO 子句的 SELECT 语句中将标识列插入到新表中。 尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

注意

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

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

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

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

increment
要加到表中后续行的 seed 值上的整数值。

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;  

示例

以下示例将来自 AdventureWorks2022database 的 Contact 表的所有行都插入到名为 NewContact 的新表中。 使用 IDENTITY 函数在 NewContact 表中从 100 而不是 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  

另请参阅

CREATE TABLE (Transact-SQL)
@@IDENTITY (Transact-SQL)
IDENTITY(属性)(Transact-SQL)
SELECT @local_variable (Transact-SQL)
DBCC CHECKIDENT (Transact-SQL)
sys.identity_columns (Transact-SQL)