【问题标题】:In sqlite How to add column in table if same column is not exists in table在sqlite中,如果表中不存在相同的列,如何在表中添加列
【发布时间】:2017-09-15 17:29:38
【问题描述】:

当且仅当表中不存在同一列时,如何在 SQLite 表中添加列?

使用ALTER TABLE 我可以创建一个新列,但想知道如何检查该列是否已存在于表中?

【问题讨论】:

  • 您可以使用'.schema tableName'查看表格列
  • @krakover 这不是答案吗?
  • @goreSplatter 取决于他想要实现的目标。我解释了如何避免这个问题,而不是如何解决它..\
  • @krakover 我认为没有问题可以避免,但是一个问题是如何确定列的存在。这又可以使用您的评论来确定。但这可能是 OT。

标签: sql database sqlite


【解决方案1】:

如果表不包含列,SQLite 会返回类似“no such column: foo”的错误:

  select foo from yourTable limit 1

你也可以得到create-table语句:

 select sql from sqlite_master where tbl_name = 'YourTableName'

然后解析结果,寻找列名。我不知道查询指定表的列列表的优雅方法,尽管可能存在。

如果您尝试这样做:

alter table YourTable add column foo {column-def whatever it is}

如果该列已经存在,您会从 SQLite 收到错误。您也可以捕获该错误。

你终于可以这样做了:

  select sql from sqlite_master 
  where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%';    -- or whatever type

如果指定的表包含查询中被双引号括起来的列,并且使用您指定的类型,您将得到结果,否则为空集。指定数据类型可确保您的 LIKE 子字符串匹配出现在列名上。

【讨论】:

    【解决方案2】:

    没有办法(据我所知)在一个 SQLite 查询中完成所有操作。您必须使用应用程序代码来管理 If/Elseness。

    检查表是否存在:

    select count(*) from sqlite_master where type = 'table' and name = MyTable';
    

    检查表中是否存在列或现在

    pragma table_info(thumbnail);
    

    但是,更好的方法可能是根据您的应用程序维护的架构版本显式更新数据库架构(例如,从架构版本 1 到 2 的特定 alter table 语句):

    pragma user_version;
    

    【讨论】:

      【解决方案3】:

      似乎不可能检查列是否不存在并在一个命令中添加新列,因为 Sqlite 不支持列的“IF NOT EXISTS”。 “如果不存在”仅适用于桌子。 这是我要做的:

      rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;");
      
      if(rev != SQLITE_OK){ // add col to table
          ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;");
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用'.schema tableName'查看表格列

        【讨论】:

          猜你喜欢
          • 2011-04-05
          • 2014-12-03
          • 1970-01-01
          • 2012-02-10
          • 1970-01-01
          • 2019-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多