Sql 使varchar列成为主键

Sql 使varchar列成为主键,sql,sql-server,sql-server-2008-r2,primary-key,alter,Sql,Sql Server,Sql Server 2008 R2,Primary Key,Alter,我做了一张桌子: id int, name varchar(50), addr varchar(50), location varchar(20) 现在我想把addr列变成主键列。我尝试了一个脚本: alter table aaa add constraint pk_addr primary key(addr) 但是它显示了一个错误,并且该列中的数据也是非空的和唯一的。我的问题是,我们是否可以将varchar列设置为主键,如果是,则上述alter列脚本是否正确。您必须指定aaa列不可为空:

我做了一张桌子:

id int,
name varchar(50),
addr varchar(50),
location varchar(20)
现在我想把
addr
列变成
主键列
。我尝试了一个脚本:

alter table aaa
add constraint pk_addr primary key(addr)

但是它显示了一个错误,并且该列中的数据也是
非空的
唯一的
。我的问题是,我们是否可以将
varchar
列设置为
主键
,如果是,则上述
alter
列脚本是否正确。

您必须指定
aaa
列不可为空:

create table aaa (id int, name varchar(50), addr varchar(50), location varchar(20));

alter table aaa alter column addr varchar(50) not null;
alter table aaa add constraint pk_addr primary key(addr);

可能您正试图更改一个列,该列的值为
null
,或者某些值相同,并且我们知道主键必须是唯一的。当您遇到这些问题时,请尝试通过SQL Management Studio进行更改,而不是进行保存,生成脚本并查看生成的脚本。@BkSantiago我已经提到,列中的值不是NULL,并且是唯一的