SQL Server 数据库服务器:ALTER TABLE,ALTER COLUMN -更改列长度

kuarbcqp  于 2022-11-28  发布在  其他
关注(0)|答案(2)|浏览(178)

我创建了以下表:

CREATE TABLE Warehouse 
(
    Code INT PRIMARY KEY, 
    location NVARCHAR(50), 
    Capacity INT
)

CREATE TABLE Boxes  
(
    Code NVARCHAR PRIMARY KEY, 
    contents NVARCHAR(50), 
    Value REAL, 
    warehouse INT FOREIGN KEY REFERENCES warehouse(code)
)

现在,我尝试使用以下语句更改列Boxes.Code的长度:

ALTER COLUMN Code NVARCHAR(20) PRIMARY KEY

但我得到
由于一个或多个对象访问此列,ALTER TABLE ALTER COLUMN代码失败

cu6pst1q

cu6pst1q1#

有几个问题:
1.您不应该在定义条件约束时不给它命名。您的主索引键会有隐含的随机名称...
1.必须为NOT NULL列指定PK!
1.只要主键正在使用此列,就不能对其进行更改
1.因此必须删除约束
1.然后您可以更改列
1.然后可以重新创建约束
所以:这应该可以,但您需要对其进行调整...

create table Warehouse(Code int not null constraint pk_warehouse primary key
                      ,location nvarchar(50)
                      ,Capacity int);
GO
create table Boxes(Code nvarchar not null constraint pk_boxes primary key
                  ,contents nvarchar (50)
                  ,Value real
                  ,warehouse int foreign key references warehouse(code));
GO

alter table Boxes drop constraint pk_boxes;
alter table Boxes alter column code nvarchar (20) not null;
alter table Boxes add constraint pk_boxes primary key(Code);
GO

--clean up
drop table Boxes;
GO
drop table Warehouse;
GO
xxls0lw8

xxls0lw82#

您需要删除PK约束,更改列大小,然后重新添加约束(顺便说一句,命名约束而不是使用系统命名的约束会使此操作容易得多)。示例:

ALTER TABLE Boxes DROP CONSTRAINT PK__Boxes__A25C5AA6647CBF9C;
alter table boxes alter column code nvarchar (20) not null;
alter table boxes ADD CONSTRAINT PK__Boxes__A25C5AA6647CBF9C PRIMARY KEY (Code);

相关问题