如何在fbexport的命令行上引用列名

时间:2016-02-23 10:08:05

标签: firebird fbexport

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

什么是正确的转义字符?

2 个答案:

答案 0 :(得分:0)

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

但问题是这是一个命令行选项,意思是

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

由shell拆分为参数:

  1. -Q
  2. SELECT a.ID, a.USERID, a.
  3. WHEN
  4. , a.INOUT FROM ATTENDANT a
  5. 虽然你想要:

    1. -Q
    2. SELECT a.ID, a.USERID, a."WHEN", a.INOUT FROM ATTENDANT a
    3. 要实现这一点,您需要在第二个参数内转义双引号,所以:

      -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

对Firebird数据库的外部访问

来自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;