2010-02-22 112 views
1

運行下面的查詢時,我得到[Informix][Informix ODBC Driver][Informix]A syntax error has occurred。當我刪除雙撇號查詢成功執行。 Google可以找到的所有信息都告訴我我做的是正確的事情。七年前,我使用Informix時沒有這種問題,所以我認爲我已經忘記了一些重要的東西!Informix撇號SQL錯誤

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 [email protected] 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

,如果你確定ODBC的版本,您正在使用,和IDS的版本(IBM Informix Dynamic Server的),以及它們所運行的平臺,這將是有益的。

當我copy'n'paste從問題的代碼轉換成SQLCMD(相當於DB-接入)在沒有表的數據庫,我得到的錯誤:

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

這表明SQL是語法正確。

那麼,爲什麼你看到一個錯誤?

我的第一個犯罪黨的嫌疑犯是最後的長(400+)字符串。在一段時間(前一段時間,AFAICR),字符串文字的長度上限爲255。如果您使用的是足夠舊的版本的ODBC驅動程序(或IDS),這可能是一個因素。

我的第二個嫌疑犯是偶爾的雙引號日期字符串。 Informix通常對於是否在字符串周圍使用單引號或雙引號是鬆懈的;這可能會有所幫助。但是,有一種方法可以像SQL標準一樣使其變得迂迴,需要圍繞字符串使用單引號,並且僅對「分隔標識符」使用雙引號。如果DELIMIDENT環境變量設置(可能通過在Windows Setnet32中),嚴格的模式將被調用,當我這樣做,在SQLCMD,我得到:

第三個嫌疑人的長列是一個BYTE或TEXT(或可能是BLOB或CLOB)類型,並且沒有從字符串文字到該類型的轉換。然而,據我所知,ODBC驅動程序跳火圈來處理這個問題,並且錯誤會有所不同,大概是這樣的:

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

所以,此刻,我覺得DELIMIDENT是非常值得追逐 - 它可能很容易修復(通過確保日期用單引號括起來或通過取消設置DELIMIDENT)。否則,嘗試一個較短的字符串,看看是否有效。

但您的基本理解是正確的 - 您正確使用加倍單引號。

+0

這真的很有幫助。我發現我可以在字符串<= 255個字符的撇號,我可以有字符串> 255個字符沒有撇號,但我不能有字符串> 255個字符的撇號!我已經解決了它並很開心。 – cja 2010-02-26 17:32:49