-1

在 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.

是否可以在临时表上做我想做的事情,还是我需要重新制作表?

4

2 回答 2

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该用户的权限。

于 2017-05-08T19:07:34.707 回答
0

正如@wei_dba 提到的,这似乎是一个权限问题。为了证明这一点,我重新创建了您的表格,向其中添加了一些数据并进行了尝试 - 它有效。如果您不能这样做,显然问题出在权限范围内;您可能需要有人为您运行该查询。
在查看您的查询时,我发现另一个问题需要快速修复。您可能需要替换以下内容:

alter table ExpAwbs  
alter column idExpAwbs varchar(12);

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

推理是您需要确保 PK 不可为空,这是您尚未放入查询的内容。

于 2017-05-08T19:07:07.650 回答