C# 字符串拼接Sql语句复杂的取变量值问题....
我现在需求是这样子的用户自定义一条复杂的Sql语句在这条Sql语句里用户给其赋变量运行程序后如果该变量值有值则将该值赋值给变量如果无值则去除掉该判断语句当Sql语句拼接好...
我现在需求是这样子的 用户自定义一条复杂的Sql语句 在这条Sql语句里 用户给其赋变量 运行程序后 如果该变量值有值 则将该值赋值给变量 如果无值则去除掉该判断语句 当Sql 语句拼接好以后 将完整的Sql语句传给WbService 取值
这只是一条简单的Sql 语句 还有更复杂的情况:
select e.organ_name 机构,f.depot_name 仓库, a.product_id 商品编码,b.product_name 商品名称,c.model_name 商品型号, b.product_unit 商品单位, a.store_num 库存数量,d.Price * g.exchange_rate 进价,h.Price 供价,i.Price 零售价 from Depot_storage_total_TB a with(nolock)
left join sys_pub_product b with(nolock) on a.product_id = b.product_id
left join Sys_Pub_product_xh c with(nolock) on b.model_id = c.model_id
left join sys_pub_product_price d with(nolock) on a.product_id = d.product_id and d.price_id = 1
left join sys_pub_product_price h with(nolock) on a.product_id = h.product_id and h.price_id = 2
left join sys_pub_product_price i with(nolock) on a.product_id = i.product_id and i.price_id = 4 and b.organ_sys_id= i.organ_sys_id
left join sys_Pub_currency g with(nolock) on d.cy_id = g.cy_id
left join sys_organ e with(nolock) on a.organ_sys_id = e.organ_sys_id
left join Sys_Pub_Depot_Info_TB f with(nolock) on a.depot_id = f.depot_id
where a.depot_id in
(
select depot_id from Sys_Pub_Depot_Info_TB with(nolock) where organ_sys_id in
(
select organ_sys_id from TBas_organ_relation with(nolock) where tax_organ_id = @taxorgan
)
and FSysID = 1 --drp,不是配件库
and FDepotStateID =1 --在用
)
and a.store_num <> 0 展开
这只是一条简单的Sql 语句 还有更复杂的情况:
select e.organ_name 机构,f.depot_name 仓库, a.product_id 商品编码,b.product_name 商品名称,c.model_name 商品型号, b.product_unit 商品单位, a.store_num 库存数量,d.Price * g.exchange_rate 进价,h.Price 供价,i.Price 零售价 from Depot_storage_total_TB a with(nolock)
left join sys_pub_product b with(nolock) on a.product_id = b.product_id
left join Sys_Pub_product_xh c with(nolock) on b.model_id = c.model_id
left join sys_pub_product_price d with(nolock) on a.product_id = d.product_id and d.price_id = 1
left join sys_pub_product_price h with(nolock) on a.product_id = h.product_id and h.price_id = 2
left join sys_pub_product_price i with(nolock) on a.product_id = i.product_id and i.price_id = 4 and b.organ_sys_id= i.organ_sys_id
left join sys_Pub_currency g with(nolock) on d.cy_id = g.cy_id
left join sys_organ e with(nolock) on a.organ_sys_id = e.organ_sys_id
left join Sys_Pub_Depot_Info_TB f with(nolock) on a.depot_id = f.depot_id
where a.depot_id in
(
select depot_id from Sys_Pub_Depot_Info_TB with(nolock) where organ_sys_id in
(
select organ_sys_id from TBas_organ_relation with(nolock) where tax_organ_id = @taxorgan
)
and FSysID = 1 --drp,不是配件库
and FDepotStateID =1 --在用
)
and a.store_num <> 0 展开
2个回答
展开全部
//假设有两个变量,是由用户赋值的
string a1=null; //变量1
string a2=null; //变量2
string strSql=null; //SQL查询语句
string strSql_add=null; //SQL查询语句的条件部分
strSql="select * from Tb_Nm ";
if(a1!=null && a1!="")
{
//表示该变量1不为空
if(strSql_add!="" && strSql_add!=null)
{
//表示条件部分有字符,此时查询条件为
strSql_add+=" and a1='"+a1+"' ";
}
else
{
//表示条件部分没有字符,此时查询条件为
strSql_add+=" where a1='"+a1+"' ";
}
}
if(a2!=null && a2!="")
{
//表示该变量2不为空
if(strSql_add!="" && strSql_add!=null)
{
//表示条件部分有字符,此时查询条件为
strSql_add+=" and a2='"+a2+"' ";
}
else
{
//表示条件部分没有字符,此时查询条件为
strSql_add+=" where a2='"+a2+"' ";
}
}
//最后把条件语句和SQL查询拼接一起
strSql=strSql+strSql_add;
//试一下吧!!有问题再追问我吧
追问
感谢你最快的回答所以把分给你 但是貌似你这回答并不能解决什么问题
按照你的这种解法即使可行也将会造成大量冗余
我不知道你有没有看到我发的那条Sql 语句 那还是最简单的一种情况 但你这解法完全不知道在干嘛 如果有兴趣你可以试下用你的这个方法要怎样去拼接
我现在打算换另外一种简单的方式去解决这个问题 就是如果这个变量有值 就将该值替换变量 如果没值 就用1=1去替换这个条件
展开全部
变量有没有,在程序中判断,然后 "select depot_id from Sys_Pub_Depot_Info_TB with(nolock) where organ_sys_id in
(
select organ_sys_id from TBas_organ_relation with(nolock) where tax_organ_id = @taxorgan
)
and"作为判断成功后需要拼接的语句,就可以了,这个语句不接上 ,整个sql照样执行,可以用string拼接,也可以用StringBuilder拼接。
(
select organ_sys_id from TBas_organ_relation with(nolock) where tax_organ_id = @taxorgan
)
and"作为判断成功后需要拼接的语句,就可以了,这个语句不接上 ,整个sql照样执行,可以用string拼接,也可以用StringBuilder拼接。
追问
哈哈 刚采纳楼上的答案就看到你的回答了 哎 你们都没有去试着去用我发的这条Sql语句拼接一下 如果你们亲自试了就发现 真没你们说的这么简单啊 复杂的情况很多 你仅仅只是这样拼接根本就不会成功! 我现在采取简单的方式去解决这个问题了 虽然没能采纳你的回答 不过对你真诚的回答表示感谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询