正如标题所说,我如何在FBExport中处理看起来像关键字的列名?
这是我的陈述的样子:
-Q "SELECT a.ID, a.USERID, a.`WHEN`, a.INOUT FROM ATTENDANT a"
然后我收到了这个错误:
Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 26
WHEN
当我使用
时"WHEN"
Error: Switches must begin with -
尝试'何时'
-Q "SELECT a.ID, a.USERID, a.'WHEN', a.INOUT FROM ATTENDANT a;"
SQL Message : -104
Invalid token
Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, column 26
'WHEN'
Error: Switches must begin with -
什么是正确的转义字符?
答案 0 :(得分:0)
对于方言3数据库,Firebird允许使用双引号("<objectname>"
)引用对象名称。请注意,引用对象名称会使它们区分大小写,因此"WHEN"
与"when"
不同。如果您的数据库是方言1,那么这是不可能的,您应该首先将数据库转换为方言3。
但问题是这是一个命令行选项,意思是
-Q "SELECT a.ID, a.USERID, a."WHEN", a.INOUT FROM ATTENDANT a"
由shell拆分为参数:
-Q
SELECT a.ID, a.USERID, a.
WHEN
, a.INOUT FROM ATTENDANT a
虽然你想要:
-Q
SELECT a.ID, a.USERID, a."WHEN", a.INOUT FROM ATTENDANT a
要实现这一点,您需要在第二个参数内转义双引号,所以:
-Q "SELECT a.ID, a.USERID, a.\"WHEN\", a.INOUT FROM ATTENDANT a"
或 - 如注释中的a_horse_with_no_name所示 - 将参数用单引号括起来:
-Q 'SELECT a.ID, a.USERID, a."WHEN", a.INOUT FROM ATTENDANT a'
这与Firebird或FBExport实际上并没有关系,而是shell(例如bash)解析命令行参数的结果。
答案 1 :(得分:0)
看起来其他人正在处理从Safescan TimeAttenedant
来自Safescan的名称列WHEN
有点愚蠢,因为这是Firebird中的关键字。
在insert语句的上下文中,我没有成功使用列列表,如:
insert into attendant (ID, USERID, DEVICEID, WHEN, INOUT, VERIFYMODE, WORKCODE) values (1092, 1, 1, '28.08.2017 08:00', 0, 4, 3);
&#34; WHEN&#34;,\&#34; WHEN \&#34;,\&#39; WHEN \&#39;,......没有成功
补救措施 - 插入所有没有列表的数据,例如:
insert into attendant values (1034, 2, 1, '28.08.2017 08:00', 0, 4, null, null, null, null, null, 3);
查询更容易:select * from attendant;