2014-09-22 2 views
0

다음 SQL이 C# 코드에 포함되어 있습니다.다른 조건이 제대로 작동하지 않는 경우 SQL

검색 쿼리이며 검색은 도시와 주소를 기반으로합니다.

아래와 같은 쿼리

string sql = "declare @v int;set @v=-1;declare @st varchar(1000);"; 
    sql += "set @st='select PLACEID,LEFT(CONVERT(NVARCHAR(1000),description),500)+''...'' as des1,LOCATIONCITY,ADDRESS,DateT,RENT from infoone where '"; 

    int x = 0; 
    string ft = ""; 
    string sql1 = ""; 

    sql += "; Select @v= count(address) from infoone where("; 

    foreach (string s in str) 
    { 
     if (x == 0) 
     { 
      ft += " " + s; 


      sql += "(address like '%" + ft.Remove(0, 1) + "%')"; 
      sql1 += "(address like ''%" + ft.Remove(0, 1) + "%'')"; 


     } 
     else 
     { 
      ft += " " + s; 
      sql += " OR (address like '%" + ft.Remove(0, 1) + "%')";//ft.Remove(0, 1) 
      sql1 += " OR (address like ''%" + ft.Remove(0, 1) + "%'')";//ft.Remove(0, 1) 


     } 
     x++; 
    } 
    sql += "); if @v > 0 begin set @[email protected]+'" + sql1 + "'+ 'and ('; end else begin set @[email protected]+'" + sql1 + "'+ 'or ('; end "; 
    sql1 = ""; 
    x = 0; 
    sql += "; Select @v= count(locationcity) from infoone where("; 
    foreach (string s in str) 
    { 
     if (x == 0) 
     { 
      sql += "(locationcity like '%" + s + "%') "; 
      sql1 += "(locationcity like ''%" + s + "%'') "; 
     } 
     else 
     { 
      sql += " OR (locationcity like '%" + s + "%') "; 
      sql1 += " OR (locationcity like ''%" + s + "%'') "; 
     } 
     x++; 
    } 
    sql += "); if @v>0 begin set @[email protected]+'" + sql1 + ")'+' and ('; end else begin set @[email protected]+'" + sql1 + ")'+ 'or ('; end "; 
    x = 0; 
    sql1 = ""; 
    ft = ""; 
    //sql += " and ("; 
    sql += "Select @v= count(address) from infoone where("; 
    foreach (string s in str) 
    { 
     if (x == 0) 
     { 
      ft += " " + s; 


      sql += "(address like '%" + ft.Remove(0, 1) + "%')"; 
      sql1 += "(address like ''%" + ft.Remove(0, 1) + "%'')"; 


     } 
     else 
     { 
      ft += " " + s; 
      sql += " OR (address like '%" + ft.Remove(0, 1) + "%')";//ft.Remove(0, 1) 
      sql1 += " OR (address like ''%" + ft.Remove(0, 1) + "%'')";//ft.Remove(0, 1) 


     } 
     x++; 
    } 
    sql += "); if @v>0 begin set @[email protected]+'" + sql1 + ")'; end else begin set @[email protected]+'" + sql1 + ")'; end execute(@st);"; 

문제는 다음 행

sql += "); if @v > 0 begin set @[email protected]+'" + sql1 + "'+ 'and ('; end else begin set @[email protected]+'" + sql1 + "'+ 'or ('; end "; 

는 SQL 변수 @v가 다음과 같이 할당하여 상기 광고에

select @v=count(address) from infoone where address like '%edmonton%' 

인 , @v는 '0'을 얻고 별도로 검사했습니다. 하지만 여전히 코드는 다음의 조건이 실행 따르고

sql += "); if @v>0 begin set @[email protected]+'" + sql1 + ")'+' and ('; end else begin set @[email protected]+'" + sql1 + ")'+ 'or ('; end "; 
x = 0; 

결국 생성하는 쿼리 (하지가해야 할 다른 조건을 실행), 그러나 다시 쿼리 SQL을 실행하여 실행하면 (...) . 그리고 주요 SQL 로그인이

declare @v int;set @v=-1;declare @st varchar(1000); 
set @st='select PLACEID,LEFT(CONVERT(NVARCHAR(1000),description),500)+''.'' as   des1,LOCATIONCITY,ADDRESS,DateT,RENT from infoone where '; 
    Select @v= count(address) from infoone where((address like '%main%') 
    OR 
    (address like '%main street%') 
    OR (address like '%main street edmonton%')); 
     if @v > 0 begin set @[email protected]+'(address like ''%main%'') 
     OR (address like ''%main street%'') OR (address like ''%main street  edmonton%'')'+ 
     'and ('; end else begin set @[email protected]+'(address like ''%main%'') OR (address like  ''%main street%'') 
     OR (address like ''%main street edmonton%'')'+ 'or ('; end ; 
     Select @v= count(locationcity) from infoone where((locationcity like '%main%') 
     OR (locationcity like '%street%') OR (locationcity like '%edmonton%')); 
      if @v>0 begin set @[email protected]+'(locationcity like ''%main%'') OR (locationcity like ''%street%'') 
      OR (locationcity like ''%edmonton%''))'+' and ('; end else begin set  @[email protected]+'(locationcity like ''%main%'') 
      OR (locationcity like ''%street%'') OR (locationcity like ''%edmonton%''))'+ 
      'or ('; end Select @v= count(address) from infoone where((address like  '%main%') 
      OR (address like '%main street%') OR (address like '%main street edmonton%')); 
      if @v>0 begin set @[email protected]+'(address like ''%main%'') OR (address like ''%main street%'') 
      OR (address like ''%main street edmonton%''))'; end else begin set @[email protected]+'(address like ''%main%'') 
      OR (address like ''%main street%'') OR (address like ''%main street edmonton%''))'; end execute(@st); 

내가 뭘 잘못 알아 내기 위해 제발 도와주세요, 쿼리에

감사

+0

마지막에 무엇이 반환되는지 확인 했습니까? 나는 쿼리를 의미합니다. – mrsrizan

+0

그렇습니다. 그렇다면 어떻게하면 @v가 0과 같아야한다고 할지라도 "if @v> 0"조건이 참이라고 말할 수 있습니다. – fc123

+0

SQL 문만을 붙여 넣을 수 있습니까? 그 문법 오류가 있는지 짐작하기가 어렵습니다. .. – Rafay

답변

0

포함되어 있지 않습니다 내가 틀렸다,하지만 경우에 저를 수정 당신 ' re 질의는 @v> 0이면 [Operation A] else [Operation B]라고 말합니다. @v == 0을 기대하고 있긴하지만 [작업 B] 대신 [작업 A]를 수행 중입니까?

위 줄에서 @v는 '0'이되어 별도로 확인해야합니다. 하지만 여전히 if 조건은 다음 코드에서 실행됩니다 (else 조건을 실행하지 않음).

@v가 기본값 -1과 같지 않을 때 [작업 B]를 수행해야하는 경우, as

if @v>=0 then begin... 
관련 문제