日期:2014-05-18  浏览次数:20809 次

使用带参数的SQL语句, 如何使其支持 IN (@parm) 这样的格式
对于

where   field_value   =   @param

这样格式的参数,   我知道如何在C#中处理,   但对于  

where   field_value   in   (@param)

这样的格式应该如何处理?   我已经试过,   使用SqlParammeter对象将多个值,   例如 "1,   2,   3 "这样的值传入是不能得到正确结果的.

------解决方案--------------------
用组合字符串的方式是可以的
------解决方案--------------------
declare @sql nvarchar(500)
set @sql = 'select * from Your table where field_value in ( ' + @param + ') '
exec sp_executesql @sql
------解决方案--------------------
where field_value in (@param1,@param2,@param3,@param4)

------解决方案--------------------
jobine(愚人渡) 一定可以,
idayu(大宇) 如果是动态,个数不定的话.比较麻烦
------解决方案--------------------
不行是什么错误呢?
------解决方案--------------------
传入值 应该和你写SQL时一样

“ '1 ', '2 ', '3 '”类似这种
------解决方案--------------------
string strParamValue = "White,Green ";
string [] strParams = strParamValue.Split( ', ');
string sqlParams = "@name0 ";
for (int i = 1; i < strParams.Length; i++)
{
sqlParams += ",@name " + i;
}
string sql = "select count(*) from authors where au_lname in ( " + sqlParmas + ") ";
SqlConnection conn = db.connection as SqlConnection;
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
for (int i = 0; i < strParams.Length; i++)
{
SqlParameter param = new SqlParameter( "@name " + i, typeof(string));
param.SqlValue = strParams[i];
adapter.SelectCommand.Parameters.Add(param);
}
DataTable tb = new DataTable();
adapter.Fill(tb);

------解决方案--------------------
--你的語句可以直接改為使用charindex來實現,功能的實現是一樣的,而且不用考慮那麼複雜了。

Select * From tablenname where CharIndex( ', ' + Cast(field_value As Varchar) + ', ', ', ' + @param + ', ') > 0
------解决方案--------------------
--或者使用like

Select * From tablenname where ', ' + @param + ', ' Like '%, ' + Cast(field_value As Varchar) + ',% '
------解决方案--------------------
in的时候除非象wuyi8808这样拼接
但是缺点是parameter是有个数限制的
如果太多
则不行

楼上的方法比较好~~~