2011-09-07 10 views
2

SQL Server 데이터베이스에서 비슷한 검색을 수행해야합니다. 하지만 검색 값에 매개 변수를 사용하는 동안 어떻게해야합니까?SQL 매개 변수의 와일드 카드

나는 캡슐화에 대해 % 님의 이야기하지 않습니다. 검색어 중간에 %을 추가 할 수 있어야합니다.

WHERE title LIKE '%foo%bar%' 

을 예로 들지 만 params를 사용합니다.

편집 : MS SQL 2008 및 C#을 사용하고 를, 그래서 다음과 같습니다 : 가 PARAMS에 정교하게

WHERE title LIKE '@SearchParam' 

@SearchParam은 다음 "%foo%bar%"로 설정됩니다.

나는 그것이 의미가 있기를 바랍니다.

+1

의 한 부분입니다 SQL 주입. 아마도 대신 전체 텍스트 색인을보아야합니까? –

+0

매개 변수의 예를 들려 줄 수 있습니까? 나는 당신이 매개 변수를'foobar'로 전달하고 그 사이에'%'를 삽입하고 싶습니다. 내가 맞습니까? – NaveenBhat

+0

사용자가 검색 필드에 *를 추가 한 다음 %로 바꾸기 만하면됩니다. 따라서 사용자는 "Nic * olai"를 검색하여 "Nicoolai"를 다시 얻을 수 있습니다. 나는 주사를 피하기 위해 노력하고있다. 매개 변수로이 작업을 수행 할 수 없다면 아마 전혀 수행하지 않을 것입니다. – Nicolai

답변

3

create proc dbo.lookupWild(@LIKEclause VARCHAR(20)) 
as 
begin 
    select * from teams where Name like @LIKEclause 
end 
go 
exec lookupWild 'E%G%' 

그리고 물건처럼 잘 작동 '1 = 1 - 드롭 테이블'주입 SQL되지 않습니다, 그들은이 초대장처럼 들린다 와일드 카드 검색

+0

저장 프로 시저가 실제로이 작업을 수행하는 유일한 방법입니까? – Nicolai

+0

이것이 어떻게 작동하는지 나는 정말로 모른다. exec lookupWild 'E %'또는 '1'= '1 - 왜 exec 명령을 중단하지 않습니까? – Nicolai

+0

한번 시도해보십시오. SQL은 매개 변수를 쿼리의 추가 텍스트로 해석하지 않습니다. 매개 변수는 LIKE 절일 뿐이므로 예제에 넣으면 SQL은이를 LIKE 식으로 봅니다. – Sparky

0

저장 프로 시저를 사용하는 경우이 방법이 정상적으로 작동합니다. Here은 비슷한 스레드입니다.

How to Escape Wildcard Characters While Searching in SQL Server

아래처럼 뭔가를 찾고 계십니까?

where title like '%foo[%]bar%' 
+0

아마 내가 잘못 된 질문을 이해하고 있지만 저장 프로 시저가 기본 문제를 여기에서 해결할 것이라고 생각하지 않습니다. –