1

正如标题所说,我将如何处理 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 -

什么是正确的转义字符?

4

2 回答 2

0

对于方言 3 数据库,Firebird 允许使用双引号 ( "<objectname>") 引用对象名称。请注意,引用对象名称会使它们区分大小写,因此"WHEN""when". 如果您的数据库是方言 1,那么这是不可能的,您应该首先将您的数据库转换为方言 3。

然而,这是一个命令行选项的问题,这意味着

-Q "SELECT a.ID, a.USERID, a."WHEN", a.INOUT FROM ATTENDANT a"

由您的外壳拆分为参数:

  1. -Q
  2. SELECT a.ID, a.USERID, a.
  3. WHEN
  4. , a.INOUT FROM ATTENDANT a

当你想要:

  1. -Q
  2. 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)如何解析命令行参数的结果。

于 2016-02-23T10:41:44.067 回答
0

看起来其他人正在处理 Safescan 对 Firebird 数据库的外部访问TimeAttenedant

Safescan 为列命名有点愚蠢,WHEN因为这是 Firebird 中的关键字。

在插入语句的上下文中,我对列列表没有成功,例如:

insert into attendant (ID, USERID, DEVICEID, WHEN, INOUT, VERIFYMODE, WORKCODE) values (1092, 1, 1, '28.08.2017 08:00', 0, 4, 3);

"WHEN", \"WHEN\", \'WHEN\', ...没有成功

补救措施 - 插入所有没有列列表的数据,例如:

insert into attendant values (1034, 2, 1, '28.08.2017 08:00', 0, 4, null, null, null, null, null, 3);

查询要容易得多:select * from attendant;

于 2017-07-27T05:40:43.057 回答