Sql 从两个不同的来源筛选100万条记录到100000条

Sql 从两个不同的来源筛选100万条记录到100000条,sql,excel,vba,filter,Sql,Excel,Vba,Filter,我有一个项目,我想在Excel VBA中自动报告一组庞大的数据。基本上我有一个1000000多条记录的数据库,我想从中提取100000条记录。我拥有100000个项目的唯一方法是在excel工作表中,我不能将其转储到同一数据库中进行筛选,也不能将其转储到同一服务器上的临时表中。 是否有方法将Excel电子表格值视为数据库,并在VBA中的SQL查询中调用它?我不希望使用循环,因为数据库响应已经足够差了 想法 谢谢 编辑-根据一条评论,我对“循环是坏的”的假设是不正确的。这是真的吗?通过ID的循环是

我有一个项目,我想在Excel VBA中自动报告一组庞大的数据。基本上我有一个1000000多条记录的数据库,我想从中提取100000条记录。我拥有100000个项目的唯一方法是在excel工作表中,我不能将其转储到同一数据库中进行筛选,也不能将其转储到同一服务器上的临时表中。 是否有方法将Excel电子表格值视为数据库,并在VBA中的SQL查询中调用它?我不希望使用循环,因为数据库响应已经足够差了

想法

谢谢


编辑-根据一条评论,我对“循环是坏的”的假设是不正确的。这是真的吗?通过ID的循环是否必须轮询数据库100000次,还是将其视为一次数据拉取?

如果要在工作簿中使用类似sql的语法进行查询,可以使用ADODB

我已经包含了一个sub to作为如何执行此操作的示例。您可以按如下方式调用said sub:

调用查询表(“从[Sheet6$A1:AI31]中选择top 100000*”,范围(“Sheet5!A1”))
这将查询位于范围
Sheet6$A1:AI31
(第一行是标题)中的数据,并将从左上角单元格
Sheet5开始转储数据!A1

子查询表(sqlStr作为字符串,目标作为范围)
作为字符串的Dim strFile
将stADO设置为字符串
Dim cnt作为ADODB连接
将记录计数设为长
模糊字段计数为长
Dim resultrange As范围
将目标设置为范围
strFile=ThisWorkbook.FullName
'根据您的excel版本,可能需要稍微更改连接字符串
stADO=“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=”&strFile_
&“扩展属性=”“Excel 12.0;HDR=Yes;IMEX=1”“
设置cnt=New ADODB.Connection
'运行查询
含碳纳米管
.CursorLocation=adUseClient
.公开赛
.CommandTimeout=0
设置rst=.Execute(sqlStr)
以
设置mydestination=destination.Cells(1,1).Offset(1,0)
'正在将数据(而不是标题)复制到目标
mydestination.CopyFromRecordset rst
"设置一些重要变量,
recordcount=rst.recordcount
fieldcount=rst.Fields.Count
Set range_collection=range(mydestination.Cells(1,1).Offset(-1,0),mydestination.Cells(1,1).Offset(recordcount-1,fieldcount-1))
'复制标题
对于i=0到fieldcount-1
mydestination.Cells(1,1).Offset(-1,i).value=rst.Fields(i).name
接下来我
"关闭一切,
cnt.关闭
设置cnt=Nothing
端接头

我不清楚您想做什么:您的标题谈到了两个不同的数据源,但您的问题只提到了一个数据源。您正在尝试将100K excel记录与数据库中的1000K记录连接起来吗?excel 100K列表是一个数据源。。。1m记录位于DB2数据库中。100k ID驻留在1m记录中,我正在寻找一种从DB2记录集中提取100k记录的方法。我认为循环会非常累人,但从下面的评论来看,我可能是错的。我需要做的是,从1m DB2记录中获取Excel表中的100k ID,而不必将DB2中的所有记录加载到Excel中。按照数据库中的要求处理这些值。这将是一个棘手的问题,因为您可能会遇到某种最大允许数量。然后运行相应的查询。在vba中,读取带有id字段的列,调用存储过程,并对查询结果进行处理。我只能查询DB2数据库。我没有选择在那个数据库中存储任何东西。我仅限于查询DB2。如果我有权制作临时表,这将很容易。啊。也许我只是想错了。