ピナクルのくるくるパソコン術

みんなが使えるパソコン術を提供します。

【SQLServer】’の入った文字列をINSERT・UPDATEしたい

そのまま入れればいいじゃないですか!

ダメでした・・・
不適切と言われちゃいました・・・

SQLServerでは文字列を「'」で囲うので、文字列中に「'」がある場合、そこで文字列が終わりだと思われます。

* 対応方法① エスケープシーケンス

SQLServerでもこのような意味を持つ文字を本文中に打てるようにするために、エスケープシーケンスが用意されています。
本文中に「'」を打つ場合は「'」の前に「'」を入れれば打てるようになります。

これで「'」も挿入できます。

今回は「'」が一つだけでしたが、「'」が複数あった場合わざわざ入れるのは面倒ですよね。

* 対応方法② バイナリダンプで入力してクエリ上で変換をかけて挿入する

① 何らかの手段で「'」の入っている文字列をバイナリに変換する

 事前になんらかの手段で文字列をバイナリに変換してください。

wakao-institute.hatenablog.com  

SQL上でバイナリ型の変数にいれる
 DECLAREでvarbinary型の変数を定義し、そこに①を入れます。  0x2049276D2050696E6E61636C65は"I'm Pinnacle"を変換したものです。

  DECLARE @binary varbinary(max);
  SET @binary = 0x2049276D2050696E6E61636C65;

③ INSERT・UPDATE時に文字列型に変換する。
 挿入時にVARCHAR型でCASTすればエスケープシーケンスを使わずに値をいれることができます。

  INSERT #TEMPTBL (TXT, NUM) SELECT CAST(@binary AS VARCHAR(MAX)),1

SQL文そのものをレコードに追加したい時など
「'」を多用するときはこちらのほうが楽ですね。