我在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 @st=@st+'" + sql1 + "'+ 'and ('; end else begin set @st=@st+'" + 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 @st=@st+'" + sql1 + ")'+' and ('; end else begin set @st=@st+'" + 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 @st=@st+'" + sql1 + ")'; end else begin set @st=@st+'" + sql1 + ")'; end execute(@st);";
问题在于以下一行
sql += "); if @v > 0 begin set @st=@st+'" + sql1 + "'+ 'and ('; end else begin set @st=@st+'" + sql1 + "'+ 'or ('; end ";
sql变量@v像这样分配,
select @v=count(address) from infoone where address like '%edmonton%'
在上面的行中,@ v应该得到' 0'我分开检查了一下。但仍然if条件在下面的代码中运行(不运行它应该的else条件)
sql += "); if @v>0 begin set @st=@st+'" + sql1 + ")'+' and ('; end else begin set @st=@st+'" + sql1 + ")'+ 'or ('; end ";
x = 0;
最后生成的查询如下,但是再次使用sql execute(...)执行查询。并且主要的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 @st=@st+'(address like ''%main%'')
OR (address like ''%main street%'') OR (address like ''%main street edmonton%'')'+
'and ('; end else begin set @st=@st+'(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 @st=@st+'(locationcity like ''%main%'') OR (locationcity like ''%street%'')
OR (locationcity like ''%edmonton%'') )'+' and ('; end else begin set @st=@st+'(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 @st=@st+'(address like ''%main%'') OR (address like ''%main street%'')
OR (address like ''%main street edmonton%''))'; end else begin set @st=@st+'(address like ''%main%'')
OR (address like ''%main street%'') OR (address like ''%main street edmonton%''))'; end execute(@st);
请帮我弄清楚我做错了什么,
由于
答案 0 :(得分:0)
如果我错了,请纠正我,但如果@v>您正在查询0 [操作A]否[操作B]。您期待@v == 0,但它仍在执行[操作A]而不是[操作B]?
在上面的行中,@ v应该得到' 0'我分开检查了一下。但仍然if条件在下面的代码中运行(不运行它应该的else条件)
如果@v不等于默认值-1时应执行[操作B],您可能希望将其写为
if @v>=0 then begin...