Indexing 如果列是主键且已编制索引,如何更改其数据类型?

Indexing 如果列是主键且已编制索引,如何更改其数据类型?,indexing,primary-key,firebird,firebird2.5,ibexpert,Indexing,Primary Key,Firebird,Firebird2.5,Ibexpert,我正在使用IBExpert来操作我的数据库。我有一个带有两个字段的旧表: - code (char 3) PK + INDEX - name (varchar 30) 新桌子应该是空的 - code (integer) PK + INDEX - name (varchar 30) 代码列中的数据仅由数字组成,即使它是字符类型 是否可以更改代码列的类型?如果是,怎么做?我假设我需要删除主键并删除或停用索引,但是IBExpert不允许我这样做,并且在我尝试删除PK:object ind

我正在使用IBExpert来操作我的数据库。我有一个带有两个字段的旧表:

 - code (char 3)  PK + INDEX
 - name (varchar 30)
新桌子应该是空的

 - code (integer) PK + INDEX
 - name (varchar 30)
代码列中的数据仅由数字组成,即使它是字符类型


是否可以更改代码列的类型?如果是,怎么做?我假设我需要删除主键并删除或停用索引,但是IBExpert不允许我这样做,并且在我尝试删除PK:object index in use时给了我这个错误

错误object index in use恰好意味着:对象正在使用,例如在一条准备好的语句的查询计划中。要修改它,您需要确保没有任何东西在该对象上持有存在锁,最简单的方法是进行更改并再次将数据库设置为联机。

请参阅IBExpert中的工具/分析依赖项,该索引可能由其他对象使用,但PK除外(唯一约束、外键约束等). Dumb选项是工具/将元数据导出到文本文件中,然后将这个巨大的SQL脚本加载到任何程序员编辑器中,并使用简单的文本搜索来搜索索引名。此外,工具/搜索元数据有望有所帮助。此外,我真的不确定这种从字符串到数字的类型更改是否真的有效。即使会-您最好在这之后立即更新整个表:
updatetablename set code=0+cast(代码为整数)
以将所有记录转换为新格式。正确的方法实际上是创建新列,然后填充它,然后删除旧列,然后重命名新列。如果旧列被其他数据库对象使用,这会很麻烦,因为它们似乎是case@Arioch“谢谢你的帮助,这似乎是一个依赖性问题……既然在FB中没有“无效因而未实例化”依赖性的概念,那么你可能要经历一段艰难的旅程来展开洋葱。有时,从提取元数据脚本创建空数据库,然后将数据泵入新的空外壳会更容易。此外,根据事务设置(wait/nowait、AFAIR),即使到数据库的现有连接也可能使用某些元数据对象。存储过程至少是这样,不确定PKs和索引。但是一个活动的
SELECT
当然可以使用一些索引,同意吗?