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);
請幫我找出我做錯了,
感謝
你有沒有檢查到底什麼是返回?我的意思是查詢。 – mrsrizan 2014-09-22 05:40:28
是的這就是我如何說「如果@v> 0」條件即使當@v應該等於0也是如此 – fc123 2014-09-22 05:53:40
您是否可以只粘貼查詢,即sql語句?它很難猜測是否有任何語法錯誤是在這個或以前的行.. – Rafay 2014-09-22 05:59:12