
直接使用in是不可以的,in使用参数时会强制转换参数类型与条件字段一致,不支持构造字符串(如果字段本身为varchar、char型,则in相当于只有一个条件值,而不是一组)
你可以使用exec,把整个sql当做参数来执行,如
exec( ‘SELECT * FROM table WHERE id IN ( ‘+@ids+ ‘) ‘)
大但是感觉这样是拼接的参数对sql诸如需要考虑一下安全性。
参考代码如下:
string sql = "exec('select * from bid where id in ('+@IDS+')')";
System.Data.SqlClient.SqlParameter[] sp = new System.Data.SqlClient.SqlParameter[]
{
new System.Data.SqlClient.SqlParameter("@IDS","1,2,3,4,5,6,7")
};
System.Data.DataTable dt = SqlServerHelper.GetDataSet(sql, "PT", sp).Tables[0];
在数据库中执行:
--查询的值列表
DECLARE @idlist varchar(100)
SET @idlist='1,2,3'
--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO
--要查询的字段类型是字符型
--查询的值列表已经加上了字符串边界符
DECLARE @idlist varchar(100)
SET @idlist='''a'',''b''''a'',''c'''
--拼接并执行动态Transact-SQL语句
EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
GO
评价