查询SQLite表时使用IF EXISTS出现THEN附近语法错误的求助
问题解决:SQLite中IF结构语法错误
错误原因
SQLite不支持在交互式查询中直接使用IF...THEN...END这类流程控制语法,该语法仅适用于SQLite的触发器、自定义函数或3.31.0及以上版本支持的存储过程中,普通单条查询无法运行此类代码。
解决方案
方案一:简洁实现需求(推荐)
直接将表存在的判断与列查询结合,仅当表存在时返回列信息,否则返回空结果集:
SELECT * FROM PRAGMA_table_info('myTableName') WHERE [name] = 'myColumnName' AND EXISTS( SELECT [name] FROM [main].[sqlite_master] WHERE [type] = 'table' AND [name] = 'myTableName' )
方案二:处理表不存在的提示(可选)
若需要在表不存在时返回提示信息,可通过UNION ALL结合条件判断实现(需保证两个分支的结果列结构一致):
-- 表不存在时返回提示 SELECT '表不存在' AS message, '' AS type, 0 AS notnull, '' AS dflt_value, 0 AS pk WHERE NOT EXISTS( SELECT [name] FROM [main].[sqlite_master] WHERE [type] = 'table' AND [name] = 'myTableName' ) UNION ALL -- 表存在时返回列信息 SELECT [name] AS message, [type], [notnull], [dflt_value], [pk] FROM PRAGMA_table_info('myTableName') WHERE [name] = 'myColumnName' AND EXISTS( SELECT [name] FROM [main].[sqlite_master] WHERE [type] = 'table' AND [name] = 'myTableName' )
内容的提问来源于stack exchange,提问作者Joseph Farrar
相关产品推荐
相关产品推荐

