Sql server SQL Server:ALTER TABLE,ALTER COLUMN-更改列长度

Sql server SQL Server:ALTER TABLE,ALTER COLUMN-更改列长度,sql-server,Sql Server,我创建了以下表格: 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 REFERENCE

我创建了以下表格:

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)
)
现在,我尝试使用以下语句更改列
框的长度。code

ALTER COLUMN Code NVARCHAR(20) PRIMARY KEY
但我明白了

ALTER TABLE ALTER列代码失败,因为一个或多个对象 访问此列


有几个问题:

  • 如果不给约束命名,则决不能定义约束。您的主键将具有神秘的随机名称
  • PK应该给非空列
  • 只要主键使用此列,您就不能更改它
  • 因此,您必须放弃约束
  • 然后您可以更改您的列
  • 然后可以重新创建约束
  • 所以:这应该是可行的,但你需要调整它

    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
    

    有几个问题:

  • 如果不给约束命名,则决不能定义约束。您的主键将具有神秘的随机名称
  • PK应该给非空列
  • 只要主键使用此列,您就不能更改它
  • 因此,您必须放弃约束
  • 然后您可以更改您的列
  • 然后可以重新创建约束
  • 所以:这应该是可行的,但你需要调整它

    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
    

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


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


    您可能需要先删除表并重新创建它。您可能需要先删除表并重新创建它。非常感谢everbody@Mojtaba,很高兴这能帮助你。请投票选出有帮助的答案,并将对你帮助最大的答案标记为已被接受(投票柜台下方的复选框)。这将向其他人表明,如果我获得声誉积分,这个问题已经解决,并让我感到高兴;-)@Mojtaba,你好,我想再次邀请你将最有用的答案标记为已接受。我只是推了你一点。。。一旦你获得了15个声望点,你就可以在帖子上投票了——你真的应该。。。请再看一下你的另一个问题,标出你接受的答案,非常感谢everbody@Mojtaba,很高兴这能帮助你。请投票选出有帮助的答案,并将对你帮助最大的答案标记为已被接受(投票柜台下方的复选框)。这将向其他人表明,如果我获得声誉积分,这个问题已经解决,并让我感到高兴;-)@Mojtaba,你好,我想再次邀请你将最有用的答案标记为已接受。我只是推了你一点。。。一旦你获得了15个声望点,你就可以在帖子上投票了——你真的应该。。。请再看一下你的另一个问题,以标记接受的解决方案,谢谢