使用带参数的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是有个数限制的
如果太多
则不行
楼上的方法比较好~~~