Informix撇号SQL错误

时间:2010-02-22 12:30:56

标签: sql informix apostrophe

我在运行下面的查询时得到[Informix][Informix ODBC Driver][Informix]A syntax error has occurred。当我删除双撇号时,查询成功执行。我用Googling找到的一切都告诉我,我做的是正确的。七年前,我使用Informix没有出现这种问题,所以我想我已经忘记了一些重要的事情!

insert into ct_repairs (ct_job_no,inh_job_no,reference,tab
,rec_date,rec_time,priority,start_dte,start_tme,app_date
,app_time,card_date,card_time,est_date_comp,est_time_comp
,act_date_comp,act_time_comp,exp_code,ct_notes,ct_status
) values (
2090
,335706
,'23026002003'
,'P'
,NULL
,''
,1
,"22/02/2010"
,'10:47'
,NULL
,''
,"22/02/2010"
,'11:14'
,NULL
,''
,NULL
,''
,'DTD'
,'**PLS NOTE PLANNED WRKS GOING ON ON ASCOT RD,IE ROOFS,RENDERERING,AND HIGH LEVEL CLOSE BOARD FENCES:SPOKE TO THE LADY AT NO 2 SHE DOESN''T NO ANYTHING ABOUT FENCE ISSUES,CALLED AT NO 4@6 ASCOT NO ACCESS TO EITHER PROPERTIES**:YOU YOU PLS SEND A EMAIL TO TREVOR ON PLANNED ASKING IF NO 2 ASCOT RD IS DOWN FOR A NEW CLOSED BOARDED FENCE,OR IS THAT THE PROBLEM NO 4 BEING PRIVATE THAT THEY  HAVEN''T PUT ONE UP**'
,0
)

1 个答案:

答案 0 :(得分:1)

如果您确定了正在使用的ODBC版本,以及IDS(IBM Informix Dynamic Server)的版本以及它们运行的​​平台,那将会很有帮助。

当我在没有表格的数据库中将问题中的代码复制到SQLCMD(相当于DB-Access)时,我收到错误:

SQL -206: The specified table (ct_repairs) is not in the database.

这表明SQL在语法上是正确的。

那么,你为什么会看到错误?

我对犯罪方的第一个怀疑是最后的长(400+)字符串。曾经有一段时间(前一段时间,AFAICR),字符串文字的长度上限为255。如果您使用的是足够旧版本的ODBC驱动程序(或IDS),则可能是一个因素。

我的第二个嫌疑人是偶尔的双引号日期字符串。对于你是否在字符串周围使用单引号或双引号,Informix通常不严格;这可能会有所帮助。但是,有一种方法可以使它像SQL标准一样迂腐,需要在字符串周围使用单引号,并且仅对“分隔标识符”使用双引号。如果设置了DELIMIDENT环境变量(可能通过Windows上的SETNET32),将调用严格模式,当我在SQLCMD中执行此操作时,我得到:

SQL -201: A syntax error has occurred.

第三个嫌疑人是长列是BYTE或TEXT(或可能是BLOB或CLOB)类型,并且没有从字符串文字到该类型的转换。然而,AFAIK,ODBC驱动程序跳过箍来处理这个问题,错误会有所不同,可能是这样的:

SQL -617: A blob data type must be supplied within this context.

所以,目前,我认为DELIMIDENT非常值得追逐 - 它可能很容易修复(通过确保日期用单引号括起来或通过取消设置DELIMIDENT)。如果做不到这一点,请尝试更短的字符串,看看是否有效。

但是你的基本理解是正确的 - 你正确使用双引号单引号。