【问题标题】:Can I change the data type of my primary key on a temporal table?我可以更改临时表上主键的数据类型吗?
【发布时间】:2017-10-06 21:35:19
【问题描述】:

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

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

【问题讨论】:

  • 您是否在该表所在的正确数据库中?

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


【解决方案1】:

试试这个:

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

【讨论】:

  • 这很奇怪。这行得通,但是数据库服务器只有一个用户,那就是管理员用户。但是,现在我得到了一个不同的错误,因为我无法从系统版本化的临时表中删除主键约束。我认为这意味着我正在尝试做的事情无法完成。
  • 实际上,打开系统版本控制允许我放弃主键约束。
【解决方案2】:

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

alter table ExpAwbs  
alter column idExpAwbs varchar(12);

与

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

理由是您需要确保 PK 不可为空,这是您尚未在查询中输入的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    相关资源
    最近更新 更多