我有一个+ 250K行的表。如何根据值列表选择行
我只需要得到与字符串值列表中的任何字符串匹配的行(这可以是从几个到+100的任何值)。
我已经试过这种方法: SQL Select where values in List<string>
但有时这种失败,因为我的查询获取太长。
目前我正在读取整个表格,然后在LINQ中处理它。
但是这种感觉不正确...
有什么建议吗?
我有一个+ 250K行的表。如何根据值列表选择行
我只需要得到与字符串值列表中的任何字符串匹配的行(这可以是从几个到+100的任何值)。
我已经试过这种方法: SQL Select where values in List<string>
但有时这种失败,因为我的查询获取太长。
目前我正在读取整个表格,然后在LINQ中处理它。
但是这种感觉不正确...
有什么建议吗?
但有时这会失败,因为我的查询时间太长。
看来,你已经选择了接受的答案,你有联系,也就是这个问题,this one:
String query = "select * from table where RecordId in ({0});";
String formatted = String.Format(query, String.Join(",", list.ToArray()));
一个缺点,以这种方式,查询相应的增加到的总长度所有字符串都在你的列表中,所以如果你的列表有许多很长的字符串,你就有可能超出查询的允许长度。
幸运的是,还有另外一个问题的答案是免费的这个问题 - 即this one:
IEnumerable<TableRow> query =
from t in db.Table
where RecordList.Any(r => t.RecordId == r)
select t;
,而不是直接将字符串值到查询字符串,它使用导致产生办法一个参数化查询。现在长度仅取决于列表中的项目数量,但不取决于其长度。因此,如果此查询适用于最大长度为100个项目左右的列表,则无论列表中的字符串总长度如何,它都将继续工作。
此方法确实有一个限制 - 取决于RDBMS,IN
列表中的项目总数可能会受到限制。但是,默认上限非常高 - 对于Oracle约为1000,对于MS SQL Server约为2000,因此具有100个左右项目的查询应该低于此限制。
没错,我试过了字符串连接解决方案。我会尽力解决您的问题,谢谢! – msp1982dk
您可以将100多个值添加到临时表中,然后查询SELECT * FROM YourTable WHERE YourValue IN (SELECT YourValue FROM #TempValues)
。
不错的建议,但不幸的是我无法在数据库中添加/编辑表格。 – msp1982dk
匹配所有字符串或它们中的任何一个? –
@ GabyakaG.Petrioli其中任何一个,都会相应更新问题... – msp1982dk