Sql server 我可以更改时态表上主键的数据类型吗?
在SQL Server 2016 Express中,我最初创建了一个带有主键的表,主键使用int数据类型。现在,深入到项目中,我意识到我需要将此列设置为字符串数据类型,但当我尝试此操作时:Sql server 我可以更改时态表上主键的数据类型吗?,sql-server,alter-table,alter-column,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 pri
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.
是否可以在临时表上执行我试图执行的操作,或者是否需要重新生成该表?正如@wei_dba所提到的,这显然是一个权限问题。为了证明这一点,我重新创建了您的表,向其中添加了一些数据并进行了尝试——它起了作用。如果您无法做到这一点,那么问题显然在权限范围内;您可能需要有人为您运行该查询。 在查看您的查询时,我看到了另一个快速修复的问题。您可能需要替换以下内容:
alter table ExpAwbs
alter column idExpAwbs varchar(12);
与
理由是您需要确保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);
如果这不起作用,则意味着用户没有权限,因此您必须更改用户或为该用户授予权限。您是否位于该表所在的正确数据库中?这很奇怪。这是可行的,但是数据库服务器只有一个用户,那就是管理员用户。但是,现在我得到了一个不同的错误,因为我无法从系统版本的时态表中删除主键约束。我假设这意味着我试图做的事情无法完成。实际上,系统版本控制的改变允许我放弃主键约束。
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);