首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SSIS 輸出 XML 文件兩大方案:平面文件目標拼接字符串 vs Script Task 原生 XML 序列化

     編輯:關於SqlServer

背景痛點

SSIS 內建目標不直接支援 XML 文件輸出,僅有 Flat File、Excel、OLE DB 等。

方案一:平面文件目標 + 字符串拼接 (簡單、無代碼)

  1. 數據流:OLE DB 源 → 派生列 構造 XML 字符串
  2. 派生列表達式:
    "" + (DT_WSTR,10)SalesOrderID + "" + (DT_WSTR,10)OrderQty + ""
  3. 平面文件目標:定義單列 (XML內容),無列分隔符,行分隔符 `{CR}{LF}`
  4. 前置/後置 SQL 執行任務寫入 XML 聲明 `` 和閉合 ``

方案二:Script Task 組件原生序列化 (靈活、標準、支援複雜結構)

// C# ScriptMain.cs
public void Main()
{
    var pkg = Dts.Variables["$Package::XmlOutputPath"].Value.ToString();
    var conn = (SqlClient.SqlConnection)Dts.Connections["SourceDB"].AcquireConnection(null);
    
    using (var cmd = new SqlClient.SqlCommand("SELECT * FROM Sales.SalesOrderDetail", conn))
    using (var reader = cmd.ExecuteReader())
    using (var writer = System.Xml.XmlWriter.Create(pkg, new XmlWriterSettings { Indent = true }))
    {
        writer.WriteStartElement("SalesOrderDetails");
        while (reader.Read())
        {
            writer.WriteStartElement("Detail");
            writer.WriteElementString("SalesOrderID", reader["SalesOrderID"].ToString());
            writer.WriteElementString("OrderQty", reader["OrderQty"].ToString());
            writer.WriteElementString("UnitPrice", reader["UnitPrice"].ToString());
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
    }
    Dts.TaskResult = (int)ScriptResults.Success;
}

方案對比

維度平面文件拼接Script Task
開發難度低 (純配置)中 (需 C#/VB.NET)
XML 結構靈活度低 (扁平、屬性難處理)高 (任意巢狀、屬性、命名空間)
性能 (大數據量)中 (字符串拼接開銷)高 (流式寫入、內存可控)
維護性表達式分散、難調試代碼集中、可單元測試
部署依賴無目標機需 .NET Framework

目標 XML 格式示例



  
    43659
    1
    2024.9940
  
  ...

源查詢結果 目標 XML 格式

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved