关于SQL的Where子句中的In的问题。(急)
where(inv_typelike@inv_typeorinv_typein(@inv_type))andplant_nolike@plantnoandcustomer...
where (inv_type like @inv_type
or inv_type in (@inv_type))
and plant_no like @plantno
and customer_cd like @customercd
and product_no like @productno
上述语句中,如果@inv_type='N'或'A',即单个字母时,
可查出结果;但如果@inv_type='N','A'时,就没有结果。
是不是in语句的问题,请高手指点。
执行储存过程
DECLARE @return_value int
EXEC @return_value = [dbo].[prodRealInv]
@plantno = N'F15',
@customercd = N'%',
@productno = N'%',
@inv_type = N'''N'',''A''',
@OutputPlant = 1,
@OutputInvType = 1,
@OutputWork_order_no = 1
SELECT 'Return Value' = @return_value
输出@inv_type,内容是
'N','A'
(1 行受影响)
@inv_type是储存过程的参数,在VB.NET中用变量传入值的。
我的VB.NET代码如下。
cmd.Parameters.Add(New SqlClient.SqlParameter("@inv_type", SqlDbType.VarChar, 50))
s = txtInvType.Text
If s.Substring(s.Length - 1, 1) = "," Then s = s.Substring(0, s.Length - 1)
If s.ToUpper = "L" Then
s = "%"
Else
s = "'" & s.Replace(",", "','") & "'"
End If
cmd.Parameters("@inv_type").Value = s
我的理解是不是这个情况下的字符串,IN语句则只把'N','A'作为一个值来看待,
如果是,SQL语句写起来就非常麻烦了。 展开
or inv_type in (@inv_type))
and plant_no like @plantno
and customer_cd like @customercd
and product_no like @productno
上述语句中,如果@inv_type='N'或'A',即单个字母时,
可查出结果;但如果@inv_type='N','A'时,就没有结果。
是不是in语句的问题,请高手指点。
执行储存过程
DECLARE @return_value int
EXEC @return_value = [dbo].[prodRealInv]
@plantno = N'F15',
@customercd = N'%',
@productno = N'%',
@inv_type = N'''N'',''A''',
@OutputPlant = 1,
@OutputInvType = 1,
@OutputWork_order_no = 1
SELECT 'Return Value' = @return_value
输出@inv_type,内容是
'N','A'
(1 行受影响)
@inv_type是储存过程的参数,在VB.NET中用变量传入值的。
我的VB.NET代码如下。
cmd.Parameters.Add(New SqlClient.SqlParameter("@inv_type", SqlDbType.VarChar, 50))
s = txtInvType.Text
If s.Substring(s.Length - 1, 1) = "," Then s = s.Substring(0, s.Length - 1)
If s.ToUpper = "L" Then
s = "%"
Else
s = "'" & s.Replace(",", "','") & "'"
End If
cmd.Parameters("@inv_type").Value = s
我的理解是不是这个情况下的字符串,IN语句则只把'N','A'作为一个值来看待,
如果是,SQL语句写起来就非常麻烦了。 展开
展开全部
这样肯定不行
你的参数必须是一个集合,如 or inv_type in ('A','a')
当你的参数为@inv_type='N','A'时,你可以这样用动态SQL来解决
v_sql varchar2(400);
v_sql :='select * from tab where 条件1 or inv_type in ('||@inv_type||'))';
execute immediate v_sql;
你的参数必须是一个集合,如 or inv_type in ('A','a')
当你的参数为@inv_type='N','A'时,你可以这样用动态SQL来解决
v_sql varchar2(400);
v_sql :='select * from tab where 条件1 or inv_type in ('||@inv_type||'))';
execute immediate v_sql;
追问
'||@inv_type||' 中的||是什么意思?
追答
字符拼接符,这是oracle中的用法,不知道你是什么数据库
展开全部
inv_type in ('N','A')才是你需要的效果
而你@inv_type=‘N,A’到sql里变成inv_type in ('N,A')你觉得能查出结果么?
而你@inv_type=‘N,A’到sql里变成inv_type in ('N,A')你觉得能查出结果么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把@inv_type打出来看看是不是少单引号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你最好把这个显示出来看看,$inv_type的值很值得怀疑,整体输出时可能会多出符号,与原要的格式不符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询