2012-05-07 12 views
17

ms SQLサーバーでエスケープする必要がある特殊文字のリストを探していましたが、同様の質問でParameterizedクエリを使用することをお勧めしました。私はすでにやっていますが、私が使っているフレームワークは私のために逃げることはありません。Tsqlでエスケープする必要がある文字

このように、私はそれらの束を試してみると、いずれかに障害が発生したかを確認しますと思った....と私は私が見つけることができるほぼすべての文字を試してみました単純なクエリなどのクエリで

select * from x where value = '<characters>' 

を試してみました私のキーボードでは、それらのすべてがうまくいくように見えます... Singe Quote以外に、1つは失敗します。

したがって、私は無効な文字の一覧を知りたいとMS SQLサーバにエスケープする必要があります - TSQLとちょうど単一引用符をエスケープするリスクを取り、トラブル

を引き起こす可能性が残りの部分を残したくありません

あなたの助けを歓迎します

+2

?パラメータ化されたクエリで何が問題になっていますか? – SLaks

+0

彼らは異なったフレームワークで異なった振る舞いをします...私のために働いていません –

+5

次に、あなたはその問題を解決すべきです。 – SLaks

答えて

30

文字列でエスケープする必要がある唯一の文字は、一重引用符です(これは2つの一重引用符でまとめられています)。そうでなければ、それは文字列であり、t-SQLはそれ以上のことで騒ぎません。

あなたがLIKEステートメントを使用している場合は、さておき、私は正しく私のためのものをエスケープしないパラメータを、使用することはできません任意のフレームワークは、ハードであるように、このSOトピックEscape a string in SQL Server so that it is safe to use in LIKE expression

を見ますやめる。手動で文字列入力をサニタイズしようとするのは、引き抜きメソッドに頼るようなものです。最終的にそれはあなたを得るでしょう。

+0

ありがとうHackedByChinese、それは私が後になった唯一の確認でした! –

+1

初めて私は手動クエリーエスケープが抜け出すのに似ているのを見たことがあります。 – Corbin

+0

これはApache Cayenneに感謝します! –

0

これが正確かどうかわかりません。

%および.およびその他のワイルドカードは、クエリによってはエスケープする必要があります。 あなたはドットを探しています。これは失敗します

select * from xxxx where field like '%.%' 
+1

あなたの答えを壊さないでください。それが間違っていると思って削除したい場合は、あなたの投稿の下の "削除"リンクをクリックしてください。 – Tunaki

0

私はちょうど_(アンダースコア)もエスケープする必要があると言いたいと思います。

SomeColumn「FD [_]%」ところで

、パラメータ化クエリと間違って何もないような製品から選択

*、時にはあなたは、SQL管理コンソールにアクセスし、素早く見つけるためのクエリを実行したいです何か外に出る。

関連する問題