SQL Server 2000 內建強大 XML 功能:查詢直接輸出 XML、透過 XML 修改資料庫資料、將 XML 視為資料表來源。
SELECT TOP 1 ID, Filename, Download_Time, Introduce
FROM download FOR XML AUTO
輸出:
SELECT TOP 1 ID, Filename, Download_Time, Introduce
FROM download FOR XML RAW
輸出:
|
<ROW> 元素SELECT TOP 1 ID, Filename, Download_Time, Introduce
FROM download FOR XML AUTO, ELEMENTS
輸出:
1
ayako_katagiri.exe
1998-12-21T00:00:00
片桐彩子Winamp Skin
SELECT TOP 1
1 AS Tag,
NULL AS Parent,
ID AS [DownloadXML!1!ID],
Filename AS [DownloadXML!1!Filename]
FROM download FOR XML EXPLICIT
輸出:
ElementName!TagNumber!AttributeName)Using EXPLICIT ModeOPENXML 可將 XML 文件解析為資料列集,像操作資料表一樣查詢。
DECLARE @l INT
DECLARE @txtXML VARCHAR(1000)
SET @txtXML = '
'
EXEC sp_xml_preparedocument @l OUTPUT, @txtXML
SELECT * FROM OPENXML(@l, '/ROOT/DOWNLOAD', 1)
WITH (ID INT, Filename VARCHAR(50))
EXEC sp_xml_removedocument @l
關鍵步驟解析:
sp_xml_preparedocument:解析 XML 字串,建立內部文件模型,回傳控制代碼OPENXML(@handle, xpath, flags):
@handle:文件代碼xpath:節點路徑(/ROOT/DOWNLOAD)flags:1=屬性導向,2=元素導向,3=混合WITH 子句:定義結果集結構(欄位名、型別)sp_xml_removedocument:**必須釋放記憶體**,否則洩漏執行結果:
ID Filename
----------- -----------------------------
1 ayako_katagiri.exe
2 beauti.mid
3 bee.mp3
4 behavior.js
5 cactivex.zip
6 chatsrvr.exe
7 chatter.exe
8 china.zip
9 ciyun.gb
10 ci_shanxi1.gb
| 場景 | 傳統做法 | SQL 2000 XML 方案 |
|---|---|---|
| Web Service 回傳 | 應用層手動組裝 XML | 資料庫層直接 FOR XML 輸出 |
| 批次資料匯入 | ETL 工具解析平面檔 | OPENXML 直接解析 XML 入庫 |
| 異構系統整合 | 中介軟體格式轉換 | XML 作為通用交換格式 |
| 半結構化資料儲存 | 大欄位存 XML 文字 | 原生 XML 型別(SQL 2005+) |
xml 資料型別、XQuery/XPath 原生支援、XML 索引xml 型別與 XQuery,效能與功能全面優於 OPENXML