我希望根据ID获取表格中的项目列表。我需要选择的ID列表包含在我的程序中的数组或字典中。
所以不要使用大量的查询:
从tblData中选择*,其中ID = 1
从tblData中选择*,其中ID = 3
从tblData中选择*,其中ID = 9
从tblData中选择*,其中ID = 15
...(此处有数千条记录)从tblData中选择*,其中ID = 50000
从tblData中选择*,其中ID = 50100
性能非常差,因为需要运行许多查询。还有其他更聪明的方法吗?
答案 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
...
根据您的表/数据库结构和数据,您可能会尝试一种不同的解决方案:
使用WHERE ID BETWEEN min_sId AND max_sId
选择所有记录(因此您在ID上有限制过滤器),然后排除您不需要的记录。 (我可能会使用这个解决方案)
使用临时表,首先插入您的ID,然后使用临时表上的INNER JOIN
从您的tblData中选择(我认为它不会更快,因为您需要插入所有在加入之前你的ids在表中
我还考虑更改界面的逻辑,如果我的用户可以选择50.000元素,那么听起来不太合适。