【发布时间】:2016-07-12 19:29:05
【问题描述】:
我将版本控制添加到我的数据库的时间比我应该的要晚一些,因此我有一些状态不一致的表。我有一个在 Java 中添加了列的表,但此时并非所有表都保证具有该列。
我一直在做的是程序的第一次运行,检查列是否存在,如果不存在则添加它。
我用来处理版本控制的库 (flyway.org) 需要一组 .sql 文件来设置数据库。对于许多表,这很简单,我只有一个带有“CREATE TABLE IF NOT EXISTS XXX”的 sql 文件,这意味着它很容易处理,仍然可以运行。
我想知道是否有某种方法可以在 SQLite 不产生我没有想到的错误的情况下处理这些更改表,或者我还没有找到如何去做。
我尝试查看是否有添加列的命令(如果不存在),但似乎没有。我试图找到一种方法来处理sqlite中的错误,例如无论如何运行alter table,而只是忽略错误,但似乎没有办法做到这一点(据我所知)。有没有人有什么建议?如果可能的话,我想要一个 .sql 脚本中 100% 的解决方案。
【问题讨论】:
-
您必须使用动态 sql 才能获得这种级别的灵活性。 ALTER TABLE 语句将在动态 sql 中。
-
@Feneric,我看到了那个,但它并没有提供仅使用 sql 语句的解决方案。他们推荐版本控制(这是我正在尝试做的)并说你可以在 python/etc 中做到这一点。
-
@SeanLange 我现在正在谷歌搜索动态 sql sqlite,但没有真正看到任何东西。还有更多提示/朝正确方向轻推吗?
-
这最初是用 sql server 标记的,这就是我的评论所引用的。我不知道您是否可以或需要使用 sqlite 来做到这一点。