我可以在时态表上更改主键的数据类型吗?

时间:2017-05-08 18:49:47

标签: sql-server alter-table alter-column

在SQL Server 2016 Express中,我最初创建了一个包含使用int数据类型的主键的表。现在,进一步进入项目,我意识到我需要这个列是一个字符串数据类型,但是当我尝试这个时:

alter table ExpAwbs
drop constraint PK_ExpAwbs;

alter table ExpAwbs
alter column idExpAwbs varchar(12);

alter table ExpAwbs
add constraint PK_ExpAwbs primary key (idExpAwbs);

我明白了

Msg 4902, Level 16, State 1, Line 1
Cannot find the object "ExpAwbs" because it does not exist or you do not have permissions.

是否有可能在临时表上执行我想要做的事情,或者我是否需要重新制作表格?

2 个答案:

答案 0 :(得分:4)

试试这个:

Use YourDatabaseName
Go

alter table ExpAwbs
drop constraint PK_ExpAwbs;

alter table ExpAwbs
alter column idExpAwbs varchar(12);

alter table ExpAwbs
add constraint PK_ExpAwbs primary key (idExpAwbs);

如果这不起作用意味着用户没有权限,那么您必须更改用户或Grant该用户的权限。

答案 1 :(得分:0)

正如@wei_dba所提到的,它肯定似乎是一个许可问题。为了证明这一点,我重新创建了你的表,向它添加了一些数据并尝试了它 - 它起作用了。如果你不能这样做,显然问题在于权限范围内;您可能需要让某人为您运行该查询 在查看您的查询时,我看到了另一个快速修复问题。您可能想要替换以下内容:

alter table ExpAwbs  
alter column idExpAwbs varchar(12);

alter table ExpAwbs  
alter column idExpAwbs varchar(12) not null;

推理是您需要确保PK不可为空,这是您未在查询中添加的内容。