我正在尝试更改列类型:
这是我到目前为止所编写的代码,但它根本不起作用。
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
有人可以帮我修改我的查询吗?
答案 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;