如何参数化包含IN
具有可变数量参数的子句的查询,比如这个?
SELECT * FROM Tags
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
在此查询中,参数的数量可以是1到5之间的任何值.
我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.
我从excel文件中获取了ID和金额列表(数千个id和相应的金额).然后我需要检查数据库以查看每个ID是否存在以及是否检查以确保DB中的金额大于或等于excel文件中的金额.
问题是运行此select语句超过6000次并返回我需要的值需要很长时间.即使在1/2秒的时间内,所有选择也需要大约一个小时.(我通常最多不会得到超过5个结果)
有更快的方法吗?
是否有可能以某种方式同时传递所有ID,只需拨打1个电话并获得大量收藏?
我尝试过使用SqlDataReaders和SqlDataAdapters,但它们看起来差不多(两种方式都太长)
以下是如何工作的一般概念
for (int i = 0; i < ID.Count; i++)
{
SqlCommand cmd = new SqlCommand("select Amount, Client, Pallet from table where ID = @ID and Amount > 0;", sqlCon);
cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID[i];
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dataTable);
da.Dispose();
}
Run Code Online (Sandbox Code Playgroud)