首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server : ALTER,ALTER列更改列长度

SQL Server : ALTER,ALTER列更改列长度
EN

Stack Overflow用户
提问于 2015-11-11 22:44:23
回答 2查看 8.3K关注 0票数 1

我创建了以下表格:

代码语言:javascript
复制
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的长度:

代码语言:javascript
复制
ALTER COLUMN Code NVARCHAR(20) PRIMARY KEY

但我得到

由于一个或多个对象访问此列,ALTER列代码失败。

EN

回答 2

Stack Overflow用户

发布于 2015-11-11 23:11:05

有几个问题:

  1. 如果不给约束命名,就不应该定义约束。你的主钥匙会有神秘的随机名字..。
  2. PK应该被赋予非空列!
  3. 只要主键使用此列,就不能更改它。
  4. 所以您必须删除约束。
  5. 然后可以更改您的列。
  6. 然后,您可以重新创建约束。

所以:这应该能行,但你需要调整它.

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-11-11 23:18:44

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33661268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档