2017-10-19 14 views
0

여기에 설명 된 것처럼 (Backslash) (Transact-SQL) 더 나은 읽기 위해 \을 줄 끝으로 삽입 할 수 있으며 INSERT INTO에 의해 텍스트가 제거됩니다.SQL Server 해제 또는 백 슬래시 처리 새 줄

이 동작을 원하지 않는다면 어떻게 처리해야합니까?

예 :이 컬럼의 순간에

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

현재 결과 :이 예에서 내 SQL 문을 수정할 수 있습니다 물론

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

하지만, 그것은 어떤에서 올 수있는 데이터를 보여줍니다 입력.

+0

잘 SSMS로 작업 할 때 적어도 수동으로 해결할 수 있습니다. SQL이 프로그래밍 방식으로 생성되는 경우 실제로 문제가됩니다. Atm 나의 유일한 아이디어는 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에 액세스하는 경우 준비된 문을 사용하여 SQL을 손상시키지 않고 문자열을 안전하게 전달할 수 있습니다.

+0

이것은 작품입니다. 나는 이미 그랬다. 이는 프로그래밍 방식으로 어댑터에서 매우 낮은 수준 (예 : Free-TDS)의 새 행을 검색하고 바꿉니다. – YvesR

+0

데이터를 제어 할 수없는 입력에서 올 수있는 경우 항상 따옴표, 백 슬래시 또는'--'와 같은 특수 문자가 포함될 수 있습니다. 이스케이프 처리없이 복사하여 붙여 넣기 만하면 SQL 주입 공격은 물론 SQL을 손상시킬 수 있습니다. 준비된 문장을 사용하는 주된 이유 중 하나입니다. SSMS를 사용하는 경우 직접해야합니다. @ 'xxx'구문을 사용해 볼 수도 있습니다. – jurez

+0

주제가 누락되었습니다. 물론 현재 사용 가능한 모든 프레임 워크는 주입을 방지하기 위해 이와 같은 것을 검사합니다. 그러나 삽입 할 텍스트를 가져 오는 저장 프로 시저를 만드는이 동작을 간단하게 생성 할 수 있습니다. 요점은이'\'문제가 SQL 서버에서 직접 처리 할 수 ​​있는지를 확인하는 방법입니다. 실제로 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-comment-should-i-add-to-code-only-answers –