选择ID in(我的程序数组)

时间:2014-04-12 06:40:06

标签: c# .net sql-server vb.net ms-access

我希望根据ID获取表格中的项目列表。我需要选择的ID列表包含在我的程序中的数组或字典中。

所以不要使用大量的查询:

  

从tblData中选择*,其中ID = 1

     

从tblData中选择*,其中ID = 3

     

从tblData中选择*,其中ID = 9

     

从tblData中选择*,其中ID = 15

     

...(此处有数千条记录)从tblData中选择*,其中ID = 50000

     

从tblData中选择*,其中ID = 50100

性能非常差,因为需要运行许多查询。还有其他更聪明的方法吗?

2 个答案:

答案 0 :(得分:0)

In条件下使用Where

Dim sIDs As String
For Each sID As String In dic.Keys
    sIDs += sID + ","
Next

'Remove last comma
sIDs = sIDs.Substring(0,sIDs.Length-1)

Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"

现在你可以执行这个sql并使用sql adapter

填充数据表

如果值存储在Array中,则可以使用String.Join并将其放在带有in语句的sql查询中。

Dim sIDs As String = String.Join(",", arrID)
Dim sql As String = "Select * from tblData where ID In (" + sIDs + ")"

答案 1 :(得分:0)

请勿使用Select *,而是使用显式列Select Column1, Column2 ...

根据您的表/数据库结构和数据,您可能会尝试一种不同的解决方案:

  1. 使用WHERE ID BETWEEN min_sId AND max_sId选择所有记录(因此您在ID上有限制过滤器),然后排除您不需要的记录。 (我可能会使用这个解决方案)

  2. 使用临时表,首先插入您的ID,然后使用临时表上的INNER JOIN从您的tblData中选择(我认为它不会更快,因为您需要插入所有在加入之前你的ids在表中

  3. 我还考虑更改界面的逻辑,如果我的用户可以选择50.000元素,那么听起来不太合适。