0
  • MicrosoftSQL2005を使用しています
  • 「誰か」は、SQLの外部で変更できないINSERT「事前定義されたステートメント」のリストを表示します(たとえば、Pythonなどのスクリプト言語を使用します)。
  • 「誰か」である私は、タイプのフィールドの引用符文字をエスケープNVARCHARしようとして問題が発生しています。

たとえば、次のSQLステートメントを実行する必要があるとします。

INSERT INTO TableX VALUES('John Doe's value') -- This is not working because of single quotes...

John Doe's valueSQLステートメントの外部のメソッドを使用せずに、その文字列を挿入()に変換する方法を見つける必要があります。

REPLACE一重引用符を関数と別の一重引用符で連結して、次のステートメントのようなものを試しましたが失敗しました。

INSERT INTO TableX VALUES('' + REPLACE('John Doe's value'), ''', '''' + '')

または

INSERT INTO TableX VALUES('''''' + REPLACE(''''''John Doe's value'''''''), '''''', '''''''' + '''''')

エスケープ文字を処理するためですが、機能していません。

ストアドプロシージャやより複雑なソリューションを使用するよりも、関数やそのような単純なものを使用する方が好きです。

4

1 に答える 1

1

SQL サーバーで受け入れる場合は、INSERT ステートメントの受け入れを停止し、適切に定義された引数とデータ型を持つストアド プロシージャを提供することを強くお勧めします。そうしないと、インジェクション攻撃を受けやすくなります (API に対する内部クライアントがそれを行うことはないと思いますが、API は脆弱になります。それだけです!)。

ところで、この場合の複雑さに関しては、関数とストアド プロシージャの両方が似ています。

于 2012-08-23T12:33:57.940 に答える