SQLServerにODBC接続し、"を含む文字列をUPDATE文で代入しようとたときの問題 

Delphi 7 で作成したプログラムからSQLServer2005にODBC接続し、UPDATE文を実行するとき、代入式の右辺の文字列によっては
「Parameter オブジェクトが適切に定義されていません。矛盾した、または不完全な情報が提供されました。」というエラーになることがある。


1.代入式の右辺の文字列に半角ダブルクォーテーションが奇数個含まれている。
2.その後に別の代入式がある。

同じSQL文をSQL Server Management Studioに貼り付けて実行してもエラーにはならないので、ODBCドライバの不具合なのではないだろうか。

UPDATE文の例:
CMTTXTに代入している文字列は一つ目のダブルクォーテーションのが全角で二つ目が半角なので、半角ダブルクォーテーションが1個(奇数個)存在していることになる。
・エラーになる代入式の並び

UPDATE SM_SSYHN SET
UPDTM = Getdate()
, CMTFIL = '9784902262032.txt'
, CMTTXT = ' 日本の○○○○○の父"と呼ばれる△△△△'
, COUPTM = CONVERT(DATETIME, '2014/06/27 14:30:38', 111)
WHERE .....

・エラーにならない代入式の並び

UPDATE SM_SSYHN SET
UPDTM = Getdate()
, COUPTM = CONVERT(DATETIME, '2014/06/27 14:30:38', 111)
, CMTFIL = '9784902262032.txt'
, CMTTXT = ' 日本の○○○○○の父"と呼ばれる△△△△'
WHERE .....


CMTTXTに代入している文字列のダブルクォーテーションを2つとも半角にしたので、半角ダブルクォーテーションが2個(偶数個)存在していることになる。
・エラーにならない文字列の代入式

UPDATE SM_SSYHN SET
UPDTM = Getdate()
, CMTFIL = '9784902262032.txt'
, CMTTXT = ' "日本の○○○○○の父"と呼ばれる△△△△'
, COUPTM = CONVERT(DATETIME, '2014/06/27 14:30:38', 111)
WHERE .....


現象を確認した環境
SQL Server 2005

ODBCドライバ:
SQL Native Client 2005.90.3042.00
SQL Native Client 2005.90.5000.00
SQL Server Native Client 10.0 2007.100.5500.00
SQL Server Native Client 11.0 2011.110.2100.60


問題の文字列の代入を最後に書くとエラーにはならないので、式の順番を入れ替えることで、とりあえずこの問題を回避した。

"SQLServerにODBC接続し、"を含む文字列をUPDATE文で代入しようとたときの問題 " へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント