2014-09-22 107 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 2014-09-22 05:40:28

+0

是的這就是我如何說「如果@v> 0」條件即使當@v應該等於0也是如此 – fc123 2014-09-22 05:53:40

+0

您是否可以只粘貼查詢,即sql語句?它很難猜測是否有任何語法錯誤是在這個或以前的行.. – Rafay 2014-09-22 05:59:12

回答

0

糾正我,如果我錯了,但你」重新查詢說如果@v> 0 [操作A]其他[操作B]。您期待@v == 0,但它仍在執行[操作A]而不是[操作B]?

在上面的行中,@v應該爲'0',我分別檢查它。但是if條件仍然運行在下面的代碼中(不運行它應該的else條件)

如果在@v不等於-1的默認值時應該執行[操作B],那麼您可能希望它寫入as

if @v>=0 then begin...