2011-11-15 3 views
1

단어 수에 따라 검색을 만드는 방법이 있습니까? T-SQL 저장 프로 시저를 사용하여 동적 검색 만들기

예를 들어 내가 @의 단어 1가 car이며 @의 word2이 wheel입니다 carwheel 그것이

select * from table 
where 
    (word is like @word1) 
    and (word is like @word2) 

같은 T-SQL 검색을 만들 것를 검색합니다.

단어 수는 제한이 없으므로 동적이어야합니다.

감사합니다.

답변

1

이것을 사용하면 @wordtable에 원하는 모든 단어가 동적으로 포함될 수 있습니다. 모든 단어가 존재하는 곳과 만 @table에서 행을 찾을 수 :

declare @wordtable table(word varchar(20)) 
declare @table table(word varchar(500)) 

insert @wordtable values('car') 
insert @wordtable values('wheel') 

insert @table values('carwheel') 
insert @table values('car') 
insert @table values('wheel') 
insert @table values('wheelcat') 

select * from @table t 
where not exists (select 1 from @wordtable where t.word not like '%' + word + '%') 

이 proberly 여전히 좋을 것 "포함". 그러나 이것은 문제를 해결하는 훌륭한 방법입니다.

0

이것은 매우 느리고 확장 가능하지 않습니다. Lucene과 같은 것을 사용하는 것이 좋습니다.

1

실제로 검색 할 단어라고 가정하면 SQL Server에는 전체 텍스트 검색 기능이 내장되어 있습니다 (http://msdn.microsoft.com/en-us/library/ms142571.aspx). 적어도 8 년. 완벽하지는 않습니다 - Lucene이 더 나은 경우를 만들 수 있습니다. 그러나 필요가 단순하다면 확실히 그 일을합니다.

"퍼지 (fuzzy)"매칭과 같은 텍스트 검색을위한 선반 기능을 사용할 수도 있음을 의미합니다.

당신이 쓸 수있는 많은 코드를 필요가 없습니다, 당신은 당신의 의사 코드에서 버그를 피할 것 -

(word is like @word1) 
    and (word is like @word2) 

단어 1과 word2가 같은 경우에만 결과를 얻을 것입니다 ...

당신은 여전히 ​​이것에 대한 SQL을 작성하려하지만 경우
0

내가 위에서 말한 것을 고려에 넣어 것입니다, 당신은

 
declare @searchTerms varchar(100) 
select @searchTerms = 'WORD1,WORD2,GIRLS,BOYS' -- some list 

select Field1, Field2 , Field3 , Field4 
from SomeTable 
where CHARINDEX(',' + Field1 + ',', ',' + @searchTerms + ',' , 0) > 0 

그래서 당신의 SearchTerms, 테이블 및 F를 CHARINDEX 기능을 시도해 볼 수도 있습니다 원하는 경우 ield를 변수로 바꿀 수 있습니다. 그런 다음 실행 한 SQL 문을 작성하십시오.

관련 문제