我的分析师每周都有一张发票的电子表格,他们需要使用支票号码和支票日期进行更新。检查表存在于SQL服务器中。什么是从SQL Server更新工作表的最快方法
我已经写了他们一个宏,通过电子表格的每一行迭代,打开使用如下语句ADO记录集:
SELECT CheckNumber, CheckDate FROM CHECKS WHERE Invoice_Number = " & cells (i,2)
...然后使用领域从记录写Excel电子表格中该行首两列的数量和日期。
该代码对几百行执行可接受的代码,但在有成千上万行时速度很慢。
有更快的方式来更新Excel电子表格,而不是使用ADO逐行查找吗?例如,是否有办法在电子表格和SQL Server中的表之间进行SQL连接?
编辑:为了回应Jeeped的问题,这里有一些澄清。
我真正想要做的是找到一种方法,用SQL Server的信息“批量”更新Excel电子表格,而不是一次执行SQL查找并将结果写入一行。有没有办法做一个连接的等价物并将整个结果集返回到单个记录集中?
上面的发票示例确实代表了我每天遇到的一类问题。最终用户有一个电子表格,其中包含他们的工作数据(例如发票),他们希望我从SQL服务器表中向其添加信息。例如,“使用列C中的发票号码,在列A中添加该发票的支票号码,并在列B中添加支票日期”。另一个例子可能是“对于列b中的每个发票,将采购订单号添加到列a”。
Excel来源列可以是数字或文本。 SQL表中的“匹配”列将是相应的数据类型,即varchar或integer。数据正常化,索引等。更新通常会影响几百或几千行,但有时会有多达二万到三万。
如果我能找到批处理行的方式,我可能会将其转换为Excel加载项以简化处理。出于这个原因,我想留在VBA中,因为我的高级用户可以扩展或修改它以满足他们的需求 - 我宁可不用.NET语言编写它,因为那样我们需要专门给开发人员时间来修改和部署它。 Excel应用程序的安全性在这里不是一个问题,因为用户已经可以通过MS Access数据库中的ODBC链接表访问数据,并且我们已经在SQL Server上采取了适当的安全预防措施。
将流程转移到SSIS将需要实际业务流程中不存在的可重复性。
您的问题是个别记录的重复调用。将所有记录一次拉入变体数组,并处理来自内存块的工作表。 – Jeeped
这就是我正在寻找的解决方案 - 批处理,但我不知道如何将数千个请求发送到批处理中的SQL服务器。 – DataWriter
在提供答案之前,您必须提供更多具体细节。是否处理了工作表中的所有发票号码或者是否有子集?发票号码在哪一栏?他们是数字还是字母数字?您需要根据发票编号更新信息还有哪些其他字段?典型更新有多少条记录.. 1K,10K,100K?我可以继续,但你可以看到你目前的问题缺乏很多重要的因素。 – Jeeped