我的分析師每週都有一張發票的電子表格,他們需要使用支票號碼和支票日期進行更新。檢查表存在於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