2013-01-03 6 views
2

나는 꽤 복잡한 쿼리를 사용하고 있으며 이와 비슷한 용어를 수정하여 (별도의 db 테이블로 사용하여 검색 쿼리에로드합니다), 매개 변수화 할 때 쿼리가 제공합니다. 다른 결과. . 닷넷의 같은 용어를 사용하는 SQL 매개 변수

그래서 이전 쿼리는 같은 섹션과 같이했다 :

((v.title = ''BA'') OR (vs.label = ''BA'') OR 
(v.title LIKE ''BA %'') OR (vs.label LIKE ''BA %'')) 
... 

그리고 (매개 변수)이 같은 뭔가를 대체 :

((v.title = @banone) OR (vs.label = @banone) OR 
(v.title LIKE @baright) OR (vs.label LIKE @baright)) 
... 
@banone=N'BA',@baright=N'BA %', 
... 

내 매개 변수

은과 같이 추가됩니다 :

string key = "ba"; 
string val = "ba"; 

parameters.Add("@" + key + "none", val); 
parameters.Add("@" + key + "right", val + " %"); 

이 두 쿼리는 같은 값입니까? 내가 놓친 게 있니?

+0

동등한 지 테스트 했습니까? – nawfal

+0

정말로 쿼리 후 변수를 설정하고 있습니까, 아니면 그냥 게시 한 것입니까? –

+0

스 니펫은 SQL 프로파일 러에서 가져온 것이고 db는이 데이터를 – cdub

답변

2
(
    (v.title = @banone) OR (vs.label = @banone) OR 
    (v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %') 
) 
... 
@banone=N'BA' 
... 
+0

@chris 네가 맞아. – cdub

+0

위의 %에서 매개 변수를 전달할 수 있습니까? 내 편집 참조 – cdub

1

처음 두 가지 경우는 존재할 이유가 없습니다. LIKE 사례 만 사용하는 경우 동일한 레코드를 캡처합니다. 예를 들면 : @ banone = 'BA'


내가 당신의 매개 변수가 코드를 추가 생각

(v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')

은 옳지 않다.

parameters.Add("@" + key + "right", val + " %");

은 주목해야 할 두 가지가 있습니다 parameters.AddWithValue("@" + key +"right", val + "%");

이어야한다. 먼저 퍼센트 기호 앞에 공백을 제거했습니다. 둘째, AddWithValue 대신 일반 Add를 사용하고 있습니다.

당신에게 질문하는 것은 그 공간이 중요한지 여부입니다. 픽업 BA 뭔가 같은 제목 것이 사실 제목 예를 들어 BAT의 값을 가지고 일을 무시합니다 title = 'BA' or title LIKE 'BA %'을 찾고, 다시 원래 쿼리에서 찾고 있지만

당신은 작업중인 데이터를 게시 할 수 있습니다 그리고 당신이받은 결과.

+0

+1에 대한 도움말 – cdub