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

SQL Server 2000 匯入 XML 檔案的三種方法完整指南

     編輯:關於SqlServer

前言

SQL Server 2000 引入原生 XML 支援,提供多種將 XML 資料載入資料庫的途徑。選擇哪種方法取決於:**XML 結構複雜度、是否需拆解至關聯資料表、效能需求、開發資源**。

方法一:SQLXML Bulk Load COM 元件(最高效、結構化拆解)

適用場景

  • XML 結構固定,需映射至多張關聯資料表(正規化存儲);
  • 大量資料(百萬列級),追求最高載入效能;
  • 需支援 XSD Schema 驗證、錯誤處理、交易控制。

核心組件

  • SQLXML 3.0 SP1+(免費下載,含 xblkld3.dll);
  • SQLXMLBulkLoad COM 物件(SQLXMLBulkLoad4 類別)。

範例:VBScript 載入腳本

' LoadXML.vbs
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad4.0")
objBL.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=TestDB;User ID=sa;Password=pwd"
objBL.ErrorLogFile = "C:\Logs\XmlLoadError.log"
objBL.KeepIdentity = False
objBL.SchemaGen = False  ' 已有 XSD,不自動產生
objBL.Execute "C:\Schemas\Orders.xsd", "C:\Data\Orders.xml"
Set objBL = Nothing
WScript.Echo "Bulk Load Completed."

XSD Schema 範例 (Orders.xsd)



  
    
      
        
        
        
        
          
            
              
              
              
            
          
        
      
    
  

關鍵註解:sql:relation 對應資料表,sql:field 對應欄位,sql:key 定義主鍵,巢狀元素自動處理父子關聯。

方法二:TEXTCOPY.exe 命令列工具(整份 XML 存入 TEXT/NTEXT/IMAGE 欄位)

適用場景

  • XML 作為文件整體存儲,不需拆解查詢;
  • 簡單、無程式開發需求,批次檔自動化;
  • 資料類型為 TEXT/NTEXT/IMAGE(SQL 2000 大物件類型)。

語法與範例

TEXTCOPY /S localhost /U sa /P pwd /D TestDB /T Documents /C XmlContent /W "WHERE DocID=1" /F C:\Data\Doc1.xml /I

參數說明:
/S  伺服器          /U 登入帳號       /P 密碼
/D  資料庫          /T 資料表         /C 欄位
/W  WHERE 條件      /F 檔案路徑       /I  匯入(/O 為匯出)

方法三:DTS (Data Transformation Services) + ActiveX Script(簡單 XML、彈性轉換)

適用場景

  • XML 結構簡單(扁平化、無深層巢狀);
  • 需在載入過程中進行資料清洗、查找、衍生欄位;
  • 團隊熟悉 DTS 設計器,不想寫 COM 程式碼。

實作步驟

  1. DTS 設計器 → 新增「資料轉換工作」;
  2. 來源:選擇「文字檔」→ 檔案類型選「XML」(需安裝 XML 解析器);
  3. 目的地:選擇目標資料表;
  4. 轉換頁籤:新增「ActiveX Script」轉換,解析 </> 標籤提取值;
  5. 範例 ActiveX Script (VBScript):
Function Main()
    Dim xmlDoc, nodeList, i
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    xmlDoc.load(DTSGlobalVariables("XMLFilePath").Value)
    
    If xmlDoc.parseError.errorCode <> 0 Then
        Main = DTSTaskExecResult_Failure
        Exit Function
    End If
    
    Set nodeList = xmlDoc.selectNodes("//Order")
    For i = 0 To nodeList.length - 1
        DTSDestination("OrderID") = nodeList(i).selectSingleNode("OrderID").text
        DTSDestination("CustomerID") = nodeList(i).selectSingleNode("CustomerID").text
        ' ... 其他欄位
        Main = DTSTaskExecResult_Success
    Next
End Function

三種方法比較總結

維度SQLXML Bulk LoadTEXTCOPYDTS + ActiveX
資料映射XML → 多張關聯表(正規化)XML → 單一大物件欄位XML → 單一/多張表(彈性)
效能極高(串流、最小記錄、平行)高(單一檔案)中(逐列解析、COM 互操作)
Schema 驗證支援 XSD 完整驗證無需自行實作
開發複雜度中(需寫 XSD + COM 程式)低(命令列)中(DTS 設計器 + Script)
維護性高(XSD 為契約)低(無結構定義)中(Script 分散在 DTS 套件)
適用 XML 複雜度高(巢狀、遞迴、多命名空間)任意(整份存儲)低~中(扁平、簡單巢狀)

選型建議

  1. 企業級資料整合、ETL 流程、高效能需求 → **SQLXML Bulk Load**;
  2. 文件管理系統、日誌存檔、非結構化 XML → **TEXTCOPY** 或直接 INSERT ... SELECT * FROM OPENROWSET(BULK...) (SQL 2005+);
  3. 臨時專案、簡單 XML、團隊無 COM 開發經驗 → **DTS**;
  4. SQL 2005/2008+ 環境 → 優先使用 OPENROWSET(BULK...)、XmlDocument.Load()、SSIS XML 來源 等原生功能。

結語

SQL Server 2000 的 XML 載入能力在當時屬於先驅水準。**SQLXML Bulk Load** 以 XSD 為契約、串流式載入、關聯映射的設計,至今仍是大量 XML 結構化入庫的標桿方案。理解三種方法的適用邊界,能讓您在遷移、整合、歸檔等場景中做出最佳技術選擇。

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