Sql-Server

如何使用 SQL Server Integration Services(新 Senario)從多個 Excel 文件中讀取數據

  • September 25, 2018

希望你做得很好。我這裡有一個場景。如您所見,我有一個包含兩個主要列的表: 在此處輸入圖像描述

我需要的是立即讀取每個“活動”的“文件路徑”,然後讀取該路徑中的 Excel 文件。所以我假設我至少需要兩個“For Each loop Container”。我已經完成了部分場景: 在此處輸入圖像描述

在“執行 sql 任務”中,我從表中檢索處於活動狀態的“文件路徑”,並將它們放入“對象”變數(我在 SSIS 中的第一個變數)中。

然後我在 SSIS 中有第二個變數,每次執行外循環時,我都會在其中保留每個“FilePath”的名稱。

最後我有我的第三個變數,每次執行內部循環時都會改變它並攜帶 Excel 文件。

外循環必須執行到元數據表中的活動行數,內循環必須執行到路徑中的文件數。

關鍵是執行包後我沒有收到錯誤,但數據不會插入我的“OLEDB 目標”我想知道你是否可以幫助我解決這個問題。

當您最初從表中提取文件路徑時ExcelFilePath,嘗試僅返回包含將使用的 Excel 文件的文件夾的名稱,並確保這些文件以\(ie C:\Excel_Exercise\Excel_Source\) 結尾。您可能需要使用RIGHT/之類的 T-SQL 函式SUBSTRING,但這樣做將允許您使用下面概述的方法載入文件。此外,您是否僅在執行 SQL 任務的 SQL 查詢中過濾“活動”文件路徑?正如您可能已經在做的那樣,請確保相應地設置DelayValidationValidateExternalMetadata屬性。

  • 第一個 Foreach 循環將是一個 Foreach ADO 列舉器,它使用來自 Execute SQL Task 的對像變數作為源變數。在“變數映射”窗格中,添加一個字元串變數,該變數將在索引 0 處保存文件目錄。
  • 在第一個 Foreach 循環內,添加另一個 Foreach 循環作為 Foreach 文件列舉器。在“集合”窗格上,為Directory屬性添加一個表達式,該表達式使用來自外部 Foreach 循環的字元串變數和目錄。在此 Foreach 循環中,在“變數映射”窗格中添加一個變數,該變數將用於保存完整的文件路徑(包括文件名/副檔名)。
  • 在此 Foreach 循環中添加一個從 Excel 源載入到所需目標的數據流任務。在 Excel 源的連接管理器上,創建一個表達式ExcelFilePath並添加包含完整文件路徑和名稱/副檔名的變數。

引用自:https://dba.stackexchange.com/questions/218493