2014-01-08 48 views
5

我有一个主键'用户名',它是'Char'的表,我必须将其更改为varchar。 有没有办法做到这一点,而不会丢失数据? 导致它的主键和级联所有其他表。改变SQL类型从字符到Varchar

谢谢。

回答

4
ALTER TABLE table_name -<-- Your Table Name 
ALTER COLUMN username VARCHAR(50) NOT NULL 
+0

嗨,谢谢,但我写道,有其他表格链接到这一个。我无法运行此SQL代码,因为我收到错误: 对象'X'依赖于'username'列。 对象'X'依赖于'username'列。 ALTER TABLE ALTER COLUMN用户名失败,因为一个或多个对象访问此列。 – user2097810

+0

那么在这种情况下,你不能改变数据类型,你需要删除外键约束,释放任何约束的列,然后改变数据类型,然后再次创建它们的约束,但是你需要改变所有数据类型所有其他表中引用此列的列。 –

5

如果此列,就会向许多其他表所引用的表你主键,它会多一点参与:

  1. 丢弃所有的外键中的所有限制引用该主键
  2. 放下你的桌子上
  3. 更改您的列的数据类型的主键约束其它表(ALTER TABLE .... ALTER COLUMN ..... VARCHAR(n) NOT NULL
  4. 重新创建主键约束
  5. 变化每一个外键列在每一个引用表到相同的数据类型的数据类型
  6. 重新建立所有其他表的所有外键关系新创建VARCHAR(n)主键列
+1

任何人都有通用的锅炉板,为任意一组表约束和数据类型跳舞吗?听起来像手动操作的痛苦。 – ggb667

相关问题