SQL - 无法更改列类型

时间:2014-10-22 15:54:16

标签: sql sql-server-express

我正在尝试更改列类型:

这是我到目前为止所编写的代码,但它根本不起作用。

ALTER TABLE VILLE
ALTER COLUMN NVIL char(12);   <-- Here I am trying to change from char(4) to char(12),
ALTER TABLE CLIENT                I do this to add a foreign key to it
ADD FOREIGN KEY (LOCALITE)    
REFERENCES VILLE

有人可以帮我修改我的查询吗?

2 个答案:

答案 0 :(得分:0)

你缺少&#34;(NVIL)&#34;从脚本末尾添加外键...?

您的两个问题应该是:

ALTER TABLE VILLE ALTER COLUMN NVIL CHAR(12);
ALTER TABLE CLIENT ADD FOREIGN KEY (LOCALITE) REFERENCES VILLE (NVIL);

但在运行之前,您需要运行:

ALTER TABLE VILLE DROP CONSTRAINT PK__VILLE__7EF717197DFD96C8;

完成后,您可以再次添加主键,但是您可能希望给它一个比为您挑选的SQL Express更好的名称?

ALTER TABLE VILLE ADD CONSTRAINT pk_VILLE PRIMARY KEY (NVIL);

答案 1 :(得分:0)

外键字段和引用的类型和定义必须相同。这意味着您的外键不允许更改字段的类型。

一个解决方案就是:

LOCK TABLES 
    Table 1 WRITE, -- pk table
    Table 2 WRITE; -- fk table

ALTER TABLE Table 2
    DROP FOREIGN KEY 'foreign name',
    MODIFY NVIL char(12);

重新创建外键

ALTER TABLE Table 2
    ADD FOREIGN KEY CONSTRAINT 'foreign name' FOREIGN KEY (Table1.NVIL)

UNLOCK TABLES;