20

ms sqlサーバーでエスケープする必要がある特殊文字のリストを探していましたが、パラメーター化されたクエリを使用するようにアドバイスされた同様の質問に対して見た回答の1つとほとんどを見つけることができませんでした..これはすでに行っていますが、使用しているフレームワーク私のためにエスケープしません。

したがって、私はそれらの束を試してみて、どれが失敗するかを確認すると思いました....そして、簡単なクエリを試しました

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

そのようなクエリでは、キーボードで見つけることができるほとんどすべての文字を試しましたが、すべてが機能しているように見えます... Singe Quoteを除いて..失敗しました。

したがって、無効であり、ms sql server - tsql でエスケープする必要がある文字のリストを知りたいのですが、一重引用符をエスケープするだけで問題を引き起こす可能性のある残りを残すリスクを冒したくありません

あなたの助けに感謝

4

3 に答える 3

36

文字列でエスケープが必要な唯一の文字は、一重引用符です (2 つの一重引用符を一緒に使用します)。それ以外の場合、これは文字列であり、t-sql はそれ以上大騒ぎしません。

LIKE ステートメントを使用している場合は、この SO トピックを参照してくださいSQL Server で文字列をエスケープして、LIKE 式で安全に使用できるようにします

余談ですが、パラメーターの使用を許可しないフレームワーク、適切にエスケープしないフレームワークは、ハードストップです。文字列入力を手動でサニタイズしようとすることは、pull out メソッドに頼るようなものです。最終的にそれはあなたを得るつもりです。

于 2012-05-07T03:16:29.280 に答える
1

_ (アンダースコア) もエスケープする必要があると言いたかっただけです。

select * from Products where SomeColumn like 'FD[_]%'

ところで、パラメーター化されたクエリには何の問題もありませんが、SQL 管理コンソールに移動してクエリをすばやく実行して何かを見つけたい場合があります。

于 2016-10-14T08:16:00.427 に答える
0

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

%および.クエリに応じて他のワイルドカードもエスケープする必要がある場合があります。ドットを探している場所。これは失敗します

select * from xxxx where field like '%.%'   
于 2016-08-22T14:49:06.480 に答える