簡體   English   中英

Excel 工作簿格式的 SSIS 處理 XML 文檔

[英]SSIS Process XML document in Excel Workbook format

我正在嘗試使用 SSIS 導入一個 XML 文檔,該文檔使用具有 17 列的 Microsoft Office Excel 格式導出。 我有一個刪除多個命名空間的 XML 任務,但現在我有一個格式類似於下面的示例代碼的文檔。 我可以將每個 Cell 加載到數據庫中它自己的記錄中,但由於行或單元格部分內沒有標簽,我有一個數據庫表,每個 Cell 有一列。 我沒有任何行號,所以不確定我是否可以進行某種預排序,或者我是否必須根據行號是 17 的倍數和 STUFF FOR XML 執行一堆 SQL通過臨時表對行進行 PATH,這看起來很混亂。

<Worksheet>
  <Table>
  <Column/>
    <Row>
      <Cell StyleID="s62">
        <Data Type="String">City</Data>
      </Cell>
      <Cell StyleID="s62">
        <Data Type="String">State</Data>
      </Cell>
      <Cell StyleID="s62">
        <Data Type="String">Zip</Data>
      </Cell>
    </Row>
  </Table>
</Worksheet>

我不知道,如果我理解正確...

假設您的 XML 位於變量DECLARE @xml XML您可以通過使用它們在樹中的位置調用它們來獲取單元格

SELECT R.value('Cell[1]/Data[1]','varchar(max)') AS City
      ,R.value('Cell[2]/Data[1]','varchar(max)') AS State
      ,R.value('Cell[3]/Data[1]','varchar(max)') AS Zip
      --add more
FROM @xml.nodes('/Worksheet/Table/Row') AS A(R)

或者你可能會考慮像這樣的支點

SELECT p.*
FROM
(
    SELECT 'Cell_' + CAST(ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS VARCHAR(10)) AS ColumnName
          ,Cell.value('Data[1]','varchar(max)') AS Data
    FROM @xml.nodes('/Worksheet/Table/Row/Cell') AS A(Cell)
) AS tbl
PIVOT
(
    MIN(Data) FOR ColumnName IN(Cell_1,Cell_2,Cell_3,Cell_4 /*add as many as you need*/)
) AS p;

第二個可以轉移到動態 SQL 中以分析現有的 Cell 節點,獲取它們的名稱和編號,並返回適合 XML 數據的結果集......

如果 XML 的數據在所有調用中都不相同,那么您需要的最后一個...

我找到的唯一解決方案是使用互操作打開帶有腳本任務的文件並將其保存為 excel 格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM