【问题标题】:SQLite alter table with result from select statementSQLite 使用 select 语句的结果更改表
【发布时间】:2013-06-18 14:26:30
【问题描述】:

我正在尝试在 mozilla sqlite 插件中执行此语句

alter table (select tbl_name from sqlite_master where rowid=1) add  GUID varchar

但这会出错:

SQLiteManager: 可能的 SQL 语法错误:alter table (select tbl_name from sqlite_master where rowid=1) add GUID varchar [ near "(": syntax error ] 异常名称:NS_ERROR_FAILURE 异常消息:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement]

语句 :select tbl_name from sqlite_master where rowid=1 工作正常

【问题讨论】:

    标签: ios database sqlite


    【解决方案1】:

    您不能这样做:在 SQL 中,表名和列名必须是嵌入在 SQL 字符串本身中的标识符。它们不能来自您查询的值,甚至不能来自查询参数。

    你需要选择表名,做alter table语句,然后单独执行。

    【讨论】:

    • 是否可以使用变量来保存查询到的数据?
    • @zahreelay 我不确定 SQLite 是否允许将结果存储在变量中,但即使允许,您也无法在 alter 语句中使用该变量的值。表名必须是标识符,而不是产生可用作标识符的字符串的表达式。
    • 谢谢。我在 Db 中有 300 个表,我需要为每个表添加一列。有没有其他办法?
    • @zahreelay 运行查询select 'alter table '||tbl_name||' add GUID varchar' from sqlite_master,复制它在文本编辑器中返回的行,然后在 SQLite 中执行结果命令(您可能需要添加分号)。
    猜你喜欢
    • 2012-12-12
    • 2010-11-03
    • 1970-01-01
    • 2020-03-28
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多