[英]How to export data from SQL table to multiple excel files in SSIS?
我創建了一個SSIS包,它從SQL中提取數據並將其加載到excel中。 我有問題使這個包動態化並將數據加載到多個excel文件中。
我首先創建了一個執行SQL任務,它使用SQL代碼保存所有文件名: SELECT FileName FROM Files
,其結果集將存儲在變量FileNameObj
。 然后我創建了一個Foreach循環容器並在里面添加了一個數據流任務。
Foreach循環容器設置: Foreach ADO枚舉器,ADO對象源變量 - FileNameObj
,變量映射 - FileName
和Index - 0.在數據流任務下,我添加了一個指向文件路徑的OLE DB源和Excel目標: C:\\Test\\ABC.xlsx
。
這是Connection Manager屬性:
ConnectionString : Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Test\\ABC.xlsx;Extended Properties="Excel 12.0;HDR=YES";
DelayValidation設置為True
ExcelFilePath是C:\\Test\\ABC.xlsx
然后我用Property ExcelFilePath
和Expression創建了一個表達式: "C:\\\\Test\\\\"+ @[User::FileName]+".xlsx"
然后我的ConnectionString變為: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Test\\.xlsx;Extended Properties="Excel 12.0;HDR=YES";
我已經在測試文件夾中創建了所有文件模板(所有文件都相同)。 我收到以下錯誤:
數據流任務出錯[Excel目標[131]]:SSIS錯誤代碼DTS_E_OLEDBERROR。 發生OLE DB錯誤。 錯誤代碼:0x80040E37。
數據流任務出錯[Excel目標[131]]:打開“Sheet1 $”的行集失敗。 檢查數據庫中是否存在該對象。
來自HRESULT的異常:0xC02020E8(Microsoft.SqlServer.DTSPipelineWrap)
我究竟做錯了什么? 或者甚至可以在SSIS中執行此操作?
請參見此處: 動態為excel連接字符串指定文件名
使用ExcelFilePath
,而不是ConnectionString
只是為了澄清:
如果每個工作表都有不同的列,那么這不會起作用 - 每個數據流在每次運行時都需要具有相同的列
如果您要加載相同的列但不同的過濾數據,那么您可能需要考慮為什么要這樣做。 是否要克服excel中的行限制? 如果是這樣,請導出為CSV。 它是否為用戶生成自定義報告? 請考慮使用報告工具。
你應該嘗試很多事情:
下載鏈接: Microsoft Access數據庫引擎2010可再發行組件
在“項目”屬性中,將64位運行時屬性更改為False
檢查Sheet1
存在於所有模板中
為filepath變量分配默認值
首先, .XLSX
格式的excel連接.XLSX
如下所示:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Test\\"+ @[User::FileName]+ ".xlsx; Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"
推薦的方法是(@ Nick.McDermaid提到的) ,將值賦給ExcelFilePath
屬性
Delay Validation
屬性設置為“ True
參考
我找到了解決自己問題的方法:為FileName
變量分配一個默認值。 我分配了ABC
並且它有效。 按預期生成兩個文件,一個用於ABC,一個用於DEF。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.