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

时间:2015-11-11 22:44:23

标签: 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 REFERENCES warehouse(code)
)

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

ALTER COLUMN Code NVARCHAR(20) PRIMARY KEY

但是我得到了

  

ALTER TABLE ALTER COLUMN代码因一个或多个对象而失败   访问此列。

2 个答案:

答案 0 :(得分:0)

有几个问题:

  1. 如果没有给它命名,就不应该定义约束。您的主键将具有神秘的随机名称......
  2. 应该将PK赋予NOT NULL列!
  3. 只要主键使用此列,就无法更改
  4. 所以你必须放弃约束
  5. 然后您可以更改列
  6. 然后您可以重新创建约束
  7. 所以:这应该有效,但你需要适应它......

      try {  // Create the input stream.
         fileRead = new Scanner(new File("testclass.txt"));
      }
      catch (FileNotFoundException e) {
         System.out.println("Can't find text file");
         return;  // End the program by returning from main().
      }
    

答案 1 :(得分:0)

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

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);