H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”
Posted
技术标签:
【中文标题】H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”【英文标题】:H2 column name select returning incorrect column name; "Column "OUT_ID" not found; SQL statement:" 【发布时间】:2013-02-04 17:21:09 【问题描述】:我正在使用H2 database,版本“H2 1.3.170 (2012-11-30)”
我有以下 制表符 分隔的文件内容:
in:value1:String out:id:Int out:description:String
N/A 0 N/A
Forced Available 1 Forced Available
Forced Not Available 2 Forced Not Available
我正在使用下面的语句来创建一个表:
CREATE TABLE xo_coverage_voip_on_xo_override AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', 'in_value_1' || chr(9) || 'out_id' || chr(9) || 'out_description', 'UTF-8', chr(9));
我尝试将创建的表用于此:
SELECT out_id FROM xo_coverage_voip_on_xo_override;
我收到此错误:
"Column "OUT_ID" not found; SQL statement:"
我哪里错了?
此外,我真的很想在插入前从表中删除第一行。但是,我无法让 WHERE 子句起作用。
如果您能提供任何帮助,我们将不胜感激。
【问题讨论】:
你能试试select "out:id:Int" from xo_coverage_voip_on_xo_override
吗?
或者,作为替代方案,使用create table xo_coverage_voip_on_xo_override(in_value1 varchar, out_id int, out_description varchar) as select * from csvread(...)
,然后使用您使用的查询?
@Thomas Mueller:当尝试“SELECT out:id:Int FROM XO_COVERAGE_VOIP_ON_XO_OVERRIDE;”时,我收到此错误:“未找到列“OUT”;SQL 语句:”
@Thomas Mueller:尝试“创建表 xo_coverage_voip_on_xo_override1(in_value1 varchar, out_id int, out_description varchar) AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', 'in_value_1' || chr(9) || 'out_id' || chr(9) || 'out_description', 'UTF-8', chr(9));",我得到这个错误:"数据转换错误转换"'out:id :Int' (XO_COVERAGE_VOIP_ON_XO_OVERRIDE1: OUT_ID INT)"; SQL 语句: -- 第 2 行 ('in:value1:String', 'out:id:Int', 'out:description:String') [22018-170] 22018 /22018"
这个错误是有道理的,因为“标题行”不会通过 int 转换。
【参考方案1】:
所以,解决方案最终是这样的声明:
CREATE TABLE xo_coverage_voip_on_xo_override1(in_value1 varchar, out_id int, out_description varchar)
AS SELECT * FROM CSVREAD('C:\Temp\xo_coverage_voip_on_xo_override.tab', null, 'UTF-8', chr(9));
关键是让 CSVREAD 查询将数据加载到完全指定的表中。并为标题行提供“null”,以便在文件中跳过它。
【讨论】:
以上是关于H2 列名选择返回不正确的列名; “未找到列“OUT_ID”;SQL 语句:”的主要内容,如果未能解决你的问题,请参考以下文章