关于SQL的Where子句中的In的问题.(急)where (inv_type like @inv_type\x05or inv_type in (@inv_type))and plant_no like @plantnoand customer_cd like @customercdand product_no like @productno上述语句中,如果@inv_type='N'或'A',即单个

来源:学生作业帮助网 编辑:作业帮 时间:2023/01/28 02:56:52

关于SQL的Where子句中的In的问题.(急)
where (inv_type like @inv_type
\x05or 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\x05@return_value int
EXEC\x05@return_value = [dbo].[prodRealInv]
\x05\x05@plantno = N'F15',
\x05\x05@customercd = N'%',
\x05\x05@productno = N'%',
\x05\x05@inv_type = N'''N'',''A''',
\x05\x05@OutputPlant = 1,
\x05\x05@OutputInvType = 1,
\x05\x05@OutputWork_order_no = 1
SELECT\x05'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;