Database 将主键从字符串更改为数字的最简单方法

Database 将主键从字符串更改为数字的最简单方法,database,oracle,entity-framework,schema,Database,Oracle,Entity Framework,Schema,我正在处理的数据库最初是(由其他人)原型化的,所有主键(和相关外键)都是字符串。关键点确实需要是数字 数据库有16个表,其中包含最少的测试数据。所有数据的关键字段中都有数字 对我来说,最简单的解决方法是什么?不确定“最小测试数据”到底是什么意思,但您可以使用SQL Developer: 导出表DDL 将数据导出为insert语句 修改1中生成的DDL脚本,将列更新为数字类型 删除并重新创建架构 应用3到2的脚本 我创建了一个SQL脚本来对单个关联进行更改,然后我将对其进行修改并重复20次 我做了

我正在处理的数据库最初是(由其他人)原型化的,所有主键(和相关外键)都是字符串。关键点确实需要是数字

数据库有16个表,其中包含最少的测试数据。所有数据的关键字段中都有数字

对我来说,最简单的解决方法是什么?

不确定“最小测试数据”到底是什么意思,但您可以使用SQL Developer:

  • 导出表DDL
  • 将数据导出为insert语句
  • 修改1中生成的DDL脚本,将列更新为数字类型
  • 删除并重新创建架构
  • 应用3到2的脚本

  • 我创建了一个SQL脚本来对单个关联进行更改,然后我将对其进行修改并重复20次

    我做了第一个表(MODULES.ID到MODULE_SESSIONS.MODULE_ID关联),它成功了。 以下是我使用的脚本:

    alter table MODULE_SESSIONS drop constraint FK_MODULE_MODULE_SESSION_FK1;
    alter table MODULES drop constraint MODULES_PK;
    alter table MODULES rename column ID to OLD;
    alter table MODULES add ID INTEGER;
    update MODULES set ID = OLD;
    alter table MODULES drop column OLD;
    alter table MODULE_SESSIONS rename column MODULE_ID to OLD;
    alter table MODULE_SESSIONS add MODULE_ID INTEGER;
    update MODULE_SESSIONS set MODULE_ID = OLD;
    alter table MODULES add constraint MODULE_PK primary key(ID); 
    alter table MODULE_SESSIONS add constraint FK_MODULE_MODULE_SESSION_FK1 foreign key(MODULE_ID) references MODULES(ID);
    alter table MODULE_SESSIONS drop column OLD;
    

    我开始在SQL Developer中手动执行此操作,它似乎意味着删除链接、删除现有主键、创建新主键、重命名现有外键、创建新外键、复制数据、创建新链接、删除旧外键。这样做21次似乎会非常痛苦。我在VS2010中使用实体框架,尝试在实体模型(edms)中更改一个PK/FK对的数据类型,然后选择“从模型更新数据库”。它似乎创建了相关联的SQL来进行更改;但是它显示为“未连接”,并且没有进行更改。在这种情况下,测试的最小数据是1-10条记录/表删除和重新创建。如果我有更多的经验和/或我有办法在出现问题时备份和恢复数据库,听起来像是easist方法;但是,我没有。所以,在这一点上,这种方法对我来说太冒险了。