如何使用标识列创建表

jp2*_*ode 105 sql t-sql sql-server

我有一个现有的表,我即将被吹走,因为我没有创建它,ID列设置为表的标识列.

使用SQL Server Management Studio,我编写了现有表的"Create To ..."脚本,并得到了:

CREATE TABLE [dbo].[History](
    [ID] [int] NOT NULL,
    [RequestID] [int] NOT NULL,
    [EmployeeID] [varchar](50) NOT NULL,
    [DateStamp] [datetime] NOT NULL,
 CONSTRAINT [PK_History] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何修改它,SQL以便我的结果表将ID列设置为标识

Gra*_*tzy 152

CREATE TABLE [dbo].[History](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [RequestID] [int] NOT NULL,
    [EmployeeID] [varchar](50) NOT NULL,
    [DateStamp] [datetime] NOT NULL,
 CONSTRAINT [PK_History] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

  • 身份(种子,增量)https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql-identity-property (3认同)
  • 参数 IDENTITY(1,1) 的含义是什么 (2认同)

Gor*_*off 32

这已经得到了回答,但我认为最简单的语法是:

CREATE TABLE History (
    ID int primary key IDENTITY(1,1) NOT NULL,
    . . .
Run Code Online (Sandbox Code Playgroud)

当您真正想要更改选项时,更复杂的约束索引非常有用.

顺便说一下,我更喜欢将这样的列命名为HistoryId,因此它匹配外键关系中列的名称.

  • OP专门用于GUI工具的输出,该工具输出现有对象的DDL.该工具可能没有,"如果可能的话,使用更简单的语法"选项.对于OP的特定情况,最不容易出错的是编辑生成的DDL中的一行,而不是尝试使用最简单的语法从头开始编写它.您提供的示例也没有像OP那样为PK约束指定名称.许多人更喜欢我命名的约束,因此它们在所有环境中都具有相同的名称(dev,test,prod).`ID int约束PK_History主键标识(1,1)`我相信. (5认同)
  • 也许,也许不是.我一直处在这样的情况:我从一个数据库中获取脚本,在另一个服务器上使用它,并且在一个地方工作的默认值对另一个不是最好的.在任何情况下,我只是建议这个解决方案,因为它对我来说似乎更简单(我个人理解"主键"关键字比我理解约束选项好得多,我考虑使用我不理解的选项"坏" ").但是,您可以更好地了解为什么可能首选其他解决方案.我应补充一点,答案已经是公认的答案. (3认同)

Phi*_*hil 11

[id] [int] IDENTITY(1,1) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

当然,因为您在SQL Server Management Studio中创建表,所以可以使用表设计器来设置标识规范.

在此输入图像描述

  • @ jp2code:我的意思是你可以创建一个带有Identity列的测试表,然后编写脚本以查看它应该如何指定. (4认同)