2012-07-30 4 views
1

많은 행이 포함 된 열이 있습니다. 나는 값 목록을 메서드에 전달하고있다. 이 열의 하위 문자열에 내가 찾는 값이 들어있는 모든 행을 반환하고 싶습니다.SQL 쿼리에서 여러 부분 문자열 검사

현재로서는 CHARINDEX을 사용하여 단일 하위 문자열을 확인하고 이후의 하위 문자열마다 OR CHARINDEX에 추가합니다. 나는 당신이 감사 할 수 있다고 확신하기 때문에, 상당히 엉망입니다.

그래서, 그 순간에, 내가 가진 :

[Long SQL query]... 
queryString.Append(string.Format(" (AND CHARINDEX('{0}', Table.Column) > 0 ", ListOfValues[0])); 
      foreach (string value in ListOfValues) 
      { 
       queryString.Append(string.Format("OR CHARINDEX('{0}', Table.Column) > 0 ", value)); 
      } 

      queryString.Append(string.Format(")AND CHARINDEX('{0}', Table.Column) > 0)")); 

queryString.Append(")"); 

이렇게 적은 구문 끔찍한 방법이있는가요? :)

감사

내가 질문을 이해한다면
+1

마지막으로 추가하려고하는 것은 무엇입니까? 형식 대신 자리 표시자를 사용하지만 매개 변수가없는 것 같습니다. 어떤 작업을해야할지 모르겠습니다. – Chris

+0

죄송합니다, 복사하여 붙여 넣기 실수 : –

+0

문제를 해결하기 위해 게시물을 업데이트 할 수 있어야합니다. – Chris

답변

0

먼저 SQL 쿼리에 문자열을 넣는 것은 매우 위험합니다! 조심하지 않으면 SQL 삽입 http://en.wikipedia.org/wiki/SQL_injection에 대한 응용 프로그램을 여는 것입니다. 대답에

그리고 지금 :

queryString.Append(string.Format(" Table.Column LIKE '%{0}%' ", ListOfValues[0])); 

는 SQL의 분사를 방지하려면, 대신에이 일을 시도 :

command.Parameters.AddWithValue("@ParamX","%" + value + "%"); 

우리가 여기 문자열 비교를하고있는 것처럼, 내가 생각할 수 없다 SQL 서버로 처리하는 덜 혼란스러운 방법.

1

당신이 더 쉽게 SQL 측에서이 작업을 수행 할 수 있습니다.

Select MyColumn 
From MyTable 
Where MyColumn Like '%MySubstringText%' 

분명히 하위 문자열을 변경하려는 경우 SQL 문을 동적으로 만들어야합니다.

편집 :

그런 다음 다음 값 목록이있는 테이블을 채울 수있는 가능한 여러 문자열을했고 경우는 CHARINDEX를 사용하여 두 테이블과 조인 필터 교차.

Create table MySubstrings 
(
    MySubstring nvarchar(100) not null 
) 


Select t.MyColumn 
From MyTable t, MySubstrings s 
Where CharIndex(s.MySubstring, t.MyColumn) > 0 

성능이 좋지 않을 수도 있습니다.

+0

'Like '는 아마도'charindex'보다 구문 적으로 무서운 것이 아니지만 여전히'this or this or this ... '의 루프와 긴 세트가 필요할 것입니다. – Chris

+0

옳은 질문입니다 - 질문을 잘못 읽었을 것입니다. –

+0

여러 값의 가능성을 다루기위한 답을 편집했습니다. –