如何使用从 select 语句获取的值更新 sqlite_master ?
例如下面我想给sqlite_master添加一个check语句:
update sqlite_master set sql = substr (sql, 1, length (sql) - 1) || ', check (CountryName in ' || select name from country_table || ' )) )'
但是,我收到以下消息
"SQLite3 Error 1 - near 'select": syntax error.
为了比较,如果我执行以下操作,我的命令就有效:
update sqlite_master set sql = substr (sql, 1, length(sql) - 1) || ', check (CountryName in ''Iceland'', ''Spain'' )) )'
我相信您的问题是由于:-
CHECK 约束的表达式不能包含子查询。
此外,您也许应该注意:-
SQLite 在创建数据库时创建模式表,并在 SQLite 用户提交 DDL 语句执行时修改其内容。一般情况下用户无需修改,一旦修改,将承担数据库损坏的风险。
修改 sqlite_master 的正确/最安全的方法是相应地修改表,并将 sqlite_master 的修改留给 SQLite。