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

SQL Server 2005 XML 資料型別完整操作指南:查詢、修改與跨表關聯

     編輯:SQL Server 2005

SQL Server 2005 引入原生 xml 資料型別,支援 XQuery/XPath 查詢與 XML DML 修改。本文系統整理從建立欄位、插入資料、多維度查詢(節點值、屬性、跨表關聯)到資料修改的完整實作範例,並附上執行結果說明。

1. 建立 XML 欄位

CREATE TABLE xmlTest (
    id INT IDENTITY(1,1) PRIMARY KEY,
    _x XML  -- XML 型別欄位
)

2. 插入 XML 資料

-- 第一筆
INSERT INTO xmlTest (_x) VALUES ('

  item11
  item12
')

-- 第二筆
INSERT INTO xmlTest (_x) VALUES ('

  item21
  item22
')

3. 多維度查詢範例

3.1 查詢完整 XML 內容

SELECT _x FROM xmlTest
查詢完整 XML 結果

3.2 查詢第一個 item 節點

SELECT _x.query('root/item[1]') FROM xmlTest
第一個 item 節點結果

3.3 取得第一個 item 節點的文字值

SELECT _x.value('(root/item)[1]', 'varchar(50)') FROM xmlTest
節點文字值結果

3.4 取得第二個 item 的 attr2 屬性值

SELECT _x.value('(root/item/@attr2)[2]', 'varchar(50)') FROM xmlTest
屬性值查詢結果

3.5 將所有 item 節點值展開為資料列

SELECT t2.c1.value('.', 'varchar(20)') AS items
FROM xmlTest
CROSS APPLY _x.nodes('root/item') AS t2(c1)
節點展開結果

3.6 查詢特定 id 記錄的所有 attr2 屬性值

SELECT t2.c1.value('@attr2', 'varchar(20)') AS attr2
FROM xmlTest
CROSS APPLY _x.nodes('root/item') AS t2(c1)
WHERE id = 1
指定 id 屬性值結果

3.7 條件過濾:取得 attr1='a1' 的第一個匹配節點 attr2 值

SELECT _x.value('(root/item[@attr1="a1"]/@attr2)[1]', 'varchar(50)')
FROM xmlTest WHERE id = 1
條件過濾結果

3.8 跨表 XML 關聯查詢

情境:表 t2 有欄位 xmlid 關聯 xmlTest.id,及 attr1 需比對 XML 內 @attr1 值

SELECT xmlTest._x.value('(root/item[@attr1=sql:column("t2.attr1")]/@attr2)[1]', 'varchar(50)') AS attr2,
       t2.attr1
FROM xmlTest JOIN t2 ON t2.xmlid = xmlTest.id
WHERE xmlTest.id = 1

4. XML 資料修改

4.1 修改節點文字值

UPDATE xmlTest
SET _x.modify('replace value of (root/item/text())[1] with "xxxxx"')
WHERE id = 1

-- 驗證
SELECT _x.query('root/item[1]') AS item1 FROM xmlTest
修改節點值結果

4.2 修改屬性值

UPDATE xmlTest
SET _x.modify('replace value of (root/item/@attr2)[2] with "2222b"')
WHERE id = 2

-- 驗證
SELECT _x.query('root/item[2]') AS item1 FROM xmlTest
修改屬性值結果

關鍵語法速查表

方法用途回傳型別
.query()回傳 XML 片段xml
.value()回傳純量值(需指定型別)指定型別
.nodes()將 XML 節點拆解為資料列集rowset
.modify()XML DML:insert/delete/replace無(就地修改)
sql:column()在 XQuery 中引用關聯資料行依資料行而定

效能建議

  • 對 XML 欄位建立 主要 XML 索引 與 次要 XML 索引(PATH、VALUE、PROPERTY)
  • 避免在大量資料上使用 // 後代軸查詢,優先使用具體路徑
  • 頻繁查詢的 XPath 路徑可考慮提升為計算欄位並建立一般索引
  • .modify() 會觸發 XML 索引維護,批次更新時建議先停用索引
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved