【问题标题】:How can I check If column already exists to avoid ALTER TABLE in an sql script file for SQLite如何检查列是否已存在以避免 SQLite 的 sql 脚本文件中的 ALTER TABLE
【发布时间】: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 来做到这一点。

标签: database sqlite


【解决方案1】:

SQLite 中没有用于 Alter Tables 的“IF NOT EXIST”子句,它不存在。

有一种方法可以使用PRAGMA table_info(table_name); 查询数据库表中包含的列。但是没有 100% 的 SQL 方法可以获取该信息并将其应用于 Alter Table 语句。

也许有一天,但不是今天。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 2012-01-03
    • 1970-01-01
    • 2010-09-08
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多