2012-05-23 39 views
80

我有一张现成的表格,因为我没有将ID列设置为表格的标识列来创建表格。如何创建具有标识列的表格

使用SQL Server Management Studio中,我照本宣科一个创建要......现有的表的和得到这个:

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] 

我的问题是,我将如何修改这个SQL,使我得到的表已将ID列设置为标识

+11

[ID] [int] NOT NULL IDENTITY(1,1) – Li0liQ

回答

114
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] 
+0

我相信这就是我一直在寻找的。我不需要将“PK_History”值更改为“ID”或任何其他内容? – jp2code

+0

不应该是你所需要的,PK_History只是主键约束在列ID上的约束名称 – Gratzy

+0

参数IDENTITY(1,1) – otc

9
[id] [int] IDENTITY(1,1) NOT NULL, 

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

enter image description here

+1

恩,谢谢菲尔。我知道该怎么做,但我不能,因为桌子已经在那里了。我必须删除表格并重新创建它,因此我使用该脚本。 – jp2code

+4

@ jp2code:我的意思是你可以用一个Identity列创建一个测试表,然后编写脚本来看看它应该如何指定。 – Phil

29

这已经回答了,但我认为最简单的语法是:当你真正想改变的选项

CREATE TABLE History (
    ID int primary key IDENTITY(1,1) NOT NULL, 
    . . . 

更复杂的约束指标是非常有用的。顺便说一下,我更喜欢命名这样一列HistoryId,所以它匹配外键关系中列的名称。

+4

OP专门处理输出现有DDL的GUI工具的输出目的。该工具可能没有,“如果可能,使用更简单的语法”选项。对于OP的特定情况,最小的错误可能是编辑生成的DDL中的一行,而不是尝试使用最简单的语法从头开始编写它。你所给的例子也没有像OP那样给PK约束分配一个名字。许多人喜欢命名我的约束,因此它们在所有环境中都具有相同的名称(dev,test,prod)。 'ID int约束PK_History主键标识(1,1)'我相信。 –

+3

也许,也许不是。我一直处于从一个数据库中取得脚本,在另一个服务器上使用脚本的情况,而在一个地方工作的默认值对另一个地方不是最好的。无论如何,我只是建议这是一个解决方案,因为它对我来说似乎更简单(我个人理解“主键”关键字比我理解约束上的选项要好得多,我考虑使用我不理解的选项“糟糕“)。但是,您为了解其他解决方案可能更受欢迎的原因提供了很好的观点我应该补充说,答案已经是公认的答案。 –

-2

唯一键允许最大2个NULL值。释:

create table teppp 
(
id int identity(1,1) primary key, 
name varchar(10)unique, 
addresss varchar(10) 
) 

insert into teppp (name,addresss) values ('','address1') 
insert into teppp (name,addresss) values ('NULL','address2') 
insert into teppp (addresss) values ('address3') 

select * from teppp 
null string , address1 
NULL,address2 
NULL,address3 

如果你尝试下面插入相同的价值观:

insert into teppp (name,addresss) values ('','address4') 
insert into teppp (name,addresss) values ('NULL','address5') 
insert into teppp (addresss) values ('address6') 

每一次,你会得到这样的错误:唯一键约束的

违反 'UQ__teppp__72E12F1B2E1BDC42'。无法在对象'dbo.teppp'中插入重复键。
该声明已被终止。

+0

我需要使'ID'列**唯一**,而不是'名称'列。你为什么将** unique **约束添加到'Name'列?你在'teppp'表中如何使你受益? – jp2code

+0

这里完全没有答案 –

相关问题