SQLite中如何基于另一表的值生成正确命名的新表?
解决SQLite动态生成表名的问题
问题原因
SQLite的DDL语句(如CREATE TABLE)不支持直接使用表达式动态生成表名,你之前的写法会把整个表达式字符串直接当作表名,而非计算后的值。
解决方案
使用SQLite的动态SQL功能(EXECUTE IMMEDIATE),先获取目标表名的计算结果,再拼接成完整的建表语句执行:
方法一:基于已插入的最新行生成表名
你已经成功插入了Internal为Layer12的行,直接查询最新的Internal值拼接表名即可:
EXECUTE IMMEDIATE 'CREATE TABLE [' || (SELECT Internal FROM Layers ORDER BY Internal DESC LIMIT 1) || '_Comment_Phrases] (Phrase TEXT, Order_By Integer);';
方法二:复用原计算逻辑生成表名
如果不想依赖刚插入的行,也可以直接复用你之前生成Internal的逻辑来计算表名:
EXECUTE IMMEDIATE 'CREATE TABLE [' || 'Layer' || (COALESCE(MAX(CAST(SUBSTR(Internal,6) AS INTEGER)),0)+1) || '_Comment_Phrases] (Phrase TEXT, Order_By Integer);';
说明
EXECUTE IMMEDIATE会将拼接后的字符串作为SQL语句执行,从而动态生成正确的表名Layer12_Comment_Phrases。- 方括号
[]用于包裹表名,避免表名包含特殊字符时出现语法错误(你的场景中Layer12_Comment_Phrases是合法标识符,也可以省略方括号)。
内容的提问来源于stack exchange,提问作者Shawn Lane
相关产品推荐
相关产品推荐

