如果在 SQLite 中存在,则删除列?

DROP COLUMN IF EXISTS in SQLite?

使用 SQLite 3.37.2。以下查询有效:

DROP TABLE IF EXISTS MyTable;
CREATE TABLE IF NOT EXISTS...;

但是对列的类似查询会生成错误:

ALTER TABLE MyTable DROP COLUMN IF EXISTS MyField;

删除 IF EXISTS,查询工作正常。

SQLite 是否支持 adding/dropping 列的 IF EXISTSIF NOT EXISTS?这个 related question 似乎回答“否”,尽管那是在 2010 年。也许最新版本中发生了一些变化。

SQLite 的主要开发人员 Richard Hipp 就同一主题最近 SQLite forum question 回答了这个问题。根据理查德的回答和@AnonCoward 的观察,以下内容为真:

自 v3.37.2(2022 年 1 月)起,SQLite 不支持以下任何一项:

ALTER TABLE ... ADD COLUMN IF NOT EXISTS ...;
ALTER TABLE ... DROP COLUMN IF EXISTS ...;

更新

目前在 SQLite 中有此功能的原型实现。 git check-in 可以be viewed here。未计划在即将发布的 v3.38.0 版本中发布,但会在未来的某个时间发布。