私はパラメータ化クエリをサポートしていないライブラリを使用していますので、私はこのようにそれらをエミュレートする関数を記述しようとしています:T-SQLでヌル文字をエスケープするには?
let params = [ String "\x00'blah" ] in
Mssql.execute ~params "SELECT $1"
これをテストするために、私はそれの文字列を送信していますすべてのASCII文字、およびエスケープ必要ように見える2つだけである:
'
から''
\0'
としてエスケープする必要が - それはCHAR(0)
に変更する必要があるように思えます
ヌル文字の部分は、文字列が開いているかどうかを追跡しておく必要がある場合や、+
を追加する必要があるため、エスケープ機能が非常に複雑になります。私はCODE(0)+''''+'a'+'s'+'d'
のようなものに変換するはるかに単純なバージョンを書くことができましたが、メガバイトのデータをサーバーに送信すると非常に非効率になると思われます。メガバイトのヌル文字を送信すると、私のバージョンも非効率になります(私はそうするつもりはありませんが、コードに時限爆弾を残すのは嫌です)。
私が思っているのは、これらのnull文字をエスケープする方法はありますか?
(また、私は何も分からないのですか?誰もあなたにまともなT-SQLライブラリへのアクセス権があると思われるので、これに関するドキュメントは見つかりません)。
EDIT:T-SQLではnull文字が動作するはずですが、FreeTDSのdbcmd
という文字列がNULL終端であると仮定して使用しているライブラリの制限があります。私は代替機能を見つけることができないようです。 \
?文字列の連結をNULLにしたり、フィルタリングのために 'WHERE'句を使用しているため、' SELECT'節で 'null'を使用することを心配していますか?連結が問題であれば、 'CONCAT'関数を使うことができます(自動的に' null'を空文字列に置き換えます)。 'WHERE'節(または' JOIN')で 'NULL'値を扱おうとするなら、例えば' ISNULL'関数を使ってそれらを扱うことができます。 – gotqn
@gotqn質問は、[ASCII NULL](https://en.wikipedia.org/wiki/Null_character)文字を含む文字列であり、SQL NULL値の処理ではありません。 – HABO