如果在 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 EXISTS
和 IF 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 版本中发布,但会在未来的某个时间发布。
使用 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 EXISTS
和 IF 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 版本中发布,但会在未来的某个时间发布。