2017-10-19 35 views
0

(Backslash) (Transact-SQL)のように、\を行末に挿入すると、読みやすくなります。INSERT INTOテキストが削除されます。SQL Serverをオフにするか、バックスラッシュを処理します。改行を削除します。

この問題を解決しない場合はどうすればいいですか?

例:

INSERT INTO [table] ([column]) VALUES ('--- 
:path c:\test\ 
:param another_string') 

現在の結果、このコラムでは、現時点では:もちろん

--- 
:path c:\test\:param another_string 

私は、この例では、私のSQLステートメントを変更することができますが、それはいずれかから来るかもしれないデータを示しています入力。

+0

SSMSで作業する場合は、少なくとも手動で回避することもできます。 SQLがプログラマチックに構築されていれば、実際には本当の問題です。私の唯一のアイデアは、データを前処理して、行末の末尾にあるバックスラッシュをChar(92)に置き換えることです。しかし、それはMSSQLの便利な機能を回避するためには残念です。 – neongrau

+0

さらに詳しい例がありますか?あなたはこれらのコマンドをどこに入力しているのか、どのようにしたいのかを記述していませんでした。 – jurez

+0

古い投稿ですが、問題に正確に直面しています:https://spin.atomicobject.com/2008/03/18/trailing-backslash-problem-and-fix-for-rails-and-sqlserver-2005/ – YvesR

答えて

0

バックスラッシュは、直後に改行がある場合のみ現在の行を継続します。通常の状況下では、これは、あなたが終値を忘れた場合を除いて、問題ではありません。

SQLにプログラムでアクセスする場合は、prepared statementを使用して、SQLを破壊することなく安全に文字列を渡すことができます。

+0

これは著作物です私もすでにやった。これは、アダプタ(例:Free-TDS)のプログラムレベルで非常に低いレベルで改行を検索して置き換えることになります。 – YvesR

+0

データが制御できない入力から来る場合は、常に引用符、バックスラッシュまたは '--'などの特殊文字を含めることができます。エスケープせずにコピー&ペーストすれば、SQLインジェクション攻撃はもちろんのこと、あなたのSQLを破壊する可能性があります。これは、準備されたステートメントを使用する主な理由の1つです。 SSMSを使用している場合は、自分で行う必要があります。また、@ 'xxx'構文を試すこともできます。 – jurez

+0

トピックがありません。もちろん、現在利用可能なフレームワークでは注射などを防ぐためにこれをチェックしますが、挿入するテキストを取得するストアドプロシージャを作成するだけで簡単にこの動作を行うことができます。重要なのは、この '\'問題がSQLサーバー上で直接処理できるかどうかを確認する方法です。なぜなら、実際に誰にもわかっていないが、多くの問題を引き起こす機能だからです。 – YvesR

0
INSERT INTO [table] ([column]) VALUES (N'--- 
:path c:\test\' + CHAR(13) + ' 
:param another_string') 
+0

これは私がすでにやったことのある作品です。これは、アダプタ(例:Free-TDS)のプログラムレベルで非常に低いレベルで改行を検索して置き換えることになります。 – YvesR

+0

https://meta.stackoverflow.com/questions/300837/what-c​​omment-should-i-add-to-code-only-answers –

関連する問題