2017-11-22 3 views
2

SQL 서버 쿼리의 LIKE 연산자는 사용자 지정 패턴을 일치시키는 데 매우 유용 할 수 있습니다. 그러나 때로는 앰퍼샌드 '%', 밑줄 '_', 대괄호 '['및 ']'와 같은 패턴에서 일부 문자 나 하위 문자열을 이스케이프해야합니다.Sql Server LIKE 쿼리에서 이스케이프해야하는 문자

실제로 나는 parametrized queries을 사용하고 있습니다. 예를 들어 _을 검색하면 "임의의 문자"를 의미하므로 LIKE 경우는 해결되지 않습니다.

그런 패턴을 벗어날 때 고려해야 할 문자 집합은 무엇입니까? 안전한 탈출을 위해 C# 함수를 제공 할 수 있습니까?

+0

https://stackoverflow.com/questions/19730941/h를 참조하십시오. ow-to-use-wildcards-in-sql-query-with-parameters –

+0

이 질문은 같은 문제를 해결하지 못하는 것 같습니다. 나는 도망 갈 수있는 완전한 문자 세트를 갖고 싶습니다. –

+0

" 따옴표 "는 문자가 아닙니다. 이중 따옴표는 어떠한 경우에도 이스케이프가 필요하지 않습니다. 작은 따옴표가 있지만 한 번 또는 여러 번 발생하는지 여부는 이스케이프 처리 방식에 아무런 영향을 미치지 않으며 매번 동일합니다. –

답변

3

%, _, [,] 및 ^를 이스케이프 처리해야하며 적절한 이스케이프 문자, 즉 LIKE 패턴의 다른 곳에서 사용하지 않는 이스케이프 문자를 선택해야합니다.

여기 LIKE (Transact-SQL)

전체 설명을 당신이 그렇게 C#에서 함수를 작성할 수 있습니다 확신합니다.

+0

@Starnutoditopo [나를 위해 잘 작동하는 것 같습니다] (https://i.stack.imgur.com/k62eJ.png). –

+0

물론 C#에서 sql 문자열을 생성하는 경우에는 코드 내에서 큰 따옴표를 이스케이프해야하지만 문자열 구분 기호가 '이므로 SQL 쿼리 창에는 표시되지 않습니다. 그래도 문제가 무엇인지 확신 할 수 없습니다. – spodger

+0

당신은'-a '로 이스케이프되어야하는'-'과''ESCAPE'로 선택하는 이스케이프 문자 자체를 놓쳤습니다 (기본적으로 이스케이프 문자는 없습니다). –

1

는 참조

How to use wildcards in SQL query with parameters

는 SqlParameter에이

DONT의 StringBuilder를 사용하거나 SQL 주입 공격을 이해하지 않는 한 함께

를 문자열을 추가 사용하십니까 ... 여기에 답 유래 기존 https://en.wikipedia.org/wiki/SQL_injection

+0

이것은 완전히 질문과 관련이 없습니다 - 매개 변수화 된 쿼리를 사용하는 것이 좋은 습관이지만 대부분의 코멘트에 있어야합니다. –