將 XML 檔案匯入 SQL Server 2000 有三種主流管道,依據「是否需解析到關聯表」、「效能需求」、「開發複雜度」擇一採用。
SQLXMLBulkLoad 物件 (含於 SQLXML 3.0 SP1)ExecuteDim bl As New SQLXMLBulkLoad3
bl.ConnectionString = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=MyDB;UID=sa;PWD=xxx"
bl.ErrorLogFile = "C:\Logs\xml_err.log"
bl.KeepIdentity = True
bl.Execute "C:\Maps\CustomerMap.xml", "C:\Data\Customers.xml"
Set bl = Nothing
text/ntext/image 欄位存入、不需解析結構C:\Program Files\Microsoft SQL Server\80\Tools\Binn\textcopy.exetextcopy /S server /U sa /P pwd /D db /T table /C column /W "WHERE id=1" /I "C:\data.xml" /F 1
/F 1 表示輸入 (Import),/F 0 為輸出< > 標籤,擷取屬性/元素值對應欄位優點:視覺化、可混合多來源、支援查詢/查找轉換;缺點:效能較差、維護困難、DTS 已淘汰 (SQL 2005+ 改 SSIS)。
| 需求 | 推薦方法 | 關鍵依據 |
|---|---|---|
| 大量 XML → 多表關聯、需 Schema 驗證、高效能 | SQLXML Bulk Load | 串流、低記憶體、原生對應 |
| 整份 XML 存單一欄位 (text/image) | textcopy.exe | 零代碼、命令列自動化 |
| 簡單 XML、一次性、需複雜自訂邏輯 | DTS + ActiveX | 視覺化、彈性 |
| SQL 2005+ 環境 | SSIS + XML 來源/ XML 任務 | 原生支援、XSLT/XPath、效能更強 |
OPENROWSET(BULK ...) + INSERT ... SELECT ... FROM OPENXML 或 nodes() 方法INSERT INTO Tbl SELECT x.value('@id','int'), x.value('name[1]','varchar(50)') FROM @xml.nodes('/root/item') AS T(x)