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

Can I change the data type of my primary key on a temporal table?

在 SQL Server 2016 Express 中,我最初制作了一个 table,其主键使用 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.

是否可以在时间 table 上做我想做的事情,或者我是否需要重新制作 table?

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

alter table ExpAwbs  
alter column idExpAwbs varchar(12);

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

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

试试这个:

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