SQL Server 2000 引入原生 XML 支援,提供多種將 XML 資料載入資料庫的途徑。選擇哪種方法取決於:**XML 結構複雜度、是否需拆解至關聯資料表、效能需求、開發資源**。
xblkld3.dll);SQLXMLBulkLoad COM 物件(SQLXMLBulkLoad4 類別)。' 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."
關鍵註解:sql:relation 對應資料表,sql:field 對應欄位,sql:key 定義主鍵,巢狀元素自動處理父子關聯。
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 為匯出)
</> 標籤提取值;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 Load | TEXTCOPY | DTS + ActiveX |
|---|---|---|---|
| 資料映射 | XML → 多張關聯表(正規化) | XML → 單一大物件欄位 | XML → 單一/多張表(彈性) |
| 效能 | 極高(串流、最小記錄、平行) | 高(單一檔案) | 中(逐列解析、COM 互操作) |
| Schema 驗證 | 支援 XSD 完整驗證 | 無 | 需自行實作 |
| 開發複雜度 | 中(需寫 XSD + COM 程式) | 低(命令列) | 中(DTS 設計器 + Script) |
| 維護性 | 高(XSD 為契約) | 低(無結構定義) | 中(Script 分散在 DTS 套件) |
| 適用 XML 複雜度 | 高(巢狀、遞迴、多命名空間) | 任意(整份存儲) | 低~中(扁平、簡單巢狀) |
INSERT ... SELECT * FROM OPENROWSET(BULK...) (SQL 2005+);OPENROWSET(BULK...)、XmlDocument.Load()、SSIS XML 來源 等原生功能。SQL Server 2000 的 XML 載入能力在當時屬於先驅水準。**SQLXML Bulk Load** 以 XSD 為契約、串流式載入、關聯映射的設計,至今仍是大量 XML 結構化入庫的標桿方案。理解三種方法的適用邊界,能讓您在遷移、整合、歸檔等場景中做出最佳技術選擇。