2010-10-07 176 views
0

我有表,以下细节添加一个新的主键,以现有的表

表名EMPLOYEE和列

EMPID (PK smallint not null) 
EMPNAME (varchar 256 not null) 
ORG (FK smallint not null) 
FUNCTION (FK smallint not null) 
EFF_DATE (datetime null) 
AUDIT_ID (varchar null) 

现在我有一个额外的coulmn添加到该表ADD_UID,使其也主要键

我正在使用此查询,但失败。

ALTER TABLE CVADMIN.EMPLOYEE 
ADD ADD_UID varchar(32) NULL, 
CONSTRAINT PK_EMPLOYEE PRIMARY KEY [NON]CLUSTERED (ADD_UID) 
go 

表'EMPLOYEE'已经定义了一个主键。

编辑

这里的想法是新列应该是唯一的,所以有些代码操作完成

+2

我想你可能必须先删除原来的主键,然后根据需要创建一个新的主键。只记得你每个表只能有一个主键,以为你可以有更多的唯一键。 – 2010-10-07 08:51:22

+0

因为在其他地方引用(2places),所以放弃第一个关键点并不是好主意。如何确保这个额外的柱子ADD_ID取得独特的价值 – GustyWind 2010-10-07 08:57:16

回答

4

要添加唯一的约束(这是额外的,如果它失败,我可以抛出_KEY_VIOLATION主键)做到这一点:

ALTER TABLE EMPLOYEE ADD CONSTRAINT uc_UID UNIQUE (ADD_UID) 
+0

谢谢这个作品!我在这里有一个问题。如果我想为未来设计数据库,如果我在新列上添加另一个唯一约束。如何区分哪些是从JDBC角度寻求唯一 – GustyWind 2010-10-07 12:06:39

+0

我不知道我理解你的问题,但在上面的示例中,uc_UID是约束的名称,并且假定它将出现在任何抛出的异常中,则可以使用它来派生不正确的字段。 – nickd 2010-10-08 10:51:33

-1

我们可以通过ALTER语句中的任何表添加新列,但添加的列可以null,你知道主键在任何栏目上不接受null
因此,我们不能通过alter语句在新添加的列上创建主键。

+3

'NOT NULL UNIQUE'。 – 2011-08-22 22:37:24

+0

不,这不是问题。您可以通过执行ALTER TABLE x ADD y INT NOT NULL DEFAULT 0;将默认值设置为非空来防止空值,并且该列对于一行表也可以是唯一的。但绝对的主要指标可能只有一个。 – hynekcer 2012-11-13 22:50:40