我有一個+ 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