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

SQL Server 2005 XML 資料類型 DML 速查:插入、查詢、更新、刪除節點實戰

     編輯:SQL Server 2005

建表

CREATE TABLE xmlTable(
    id INT IDENTITY(1,1) NOT NULL,
    doc XML NULL
);

一、插入資料

1. 從檔案

INSERT INTO xmlTable(doc)
SELECT * FROM OPENROWSET(BULK 'C:\1.xml', SINGLE_CLOB) x;

1.xml 範例:


dafaf2dafaf3dafaf4

2. 從字串

INSERT INTO xmlTable(doc) VALUES('
123
');

二、查詢

-- 取第一個 id>2 的  節點文字
SELECT doc.value('(/dd/a[@id>2])[1]', 'NVARCHAR(50)') FROM xmlTable;

-- 條件查詢:節點值 = '博客園'
SELECT * FROM xmlTable WHERE doc.value('(/dd/a[@id>2])[1]', 'NVARCHAR(50)') = N'博客園';

三、更新 (modify() 方法)

1. 插入節點

-- 內部插入 (成爲子節點)
UPDATE xmlTable SET doc.modify('insert 123 into (/dd)[1]');

-- 同級插入:after / before
UPDATE xmlTable SET doc.modify('insert new after (/dd/a)[1]');
UPDATE xmlTable SET doc.modify('insert new before (/dd/a)[1]');

2. 刪除節點

UPDATE xmlTable SET doc.modify('delete (/dd/a)[1]');  -- 刪除第一個 

3. 修改節點文字

UPDATE xmlTable
SET doc.modify('replace value of (/dd/a/text())[1] with "博客園"');

關鍵語法速查表

操作modify() XQuery 範本
插入子節點insert into (/parent)[1]
插入同級 (後)insert after (/parent/child)[1]
插入同級 (前)insert before (/parent/child)[1]
刪除節點delete (/path/to/node)[1]
替換節點值replace value of (/path/text())[1] with "new value"
替換屬性值replace value of (/path/@attr)[1] with "new"

注意事項

  • modify() 僅能在 UPDATE ... SET xml_col.modify(...) 中使用,不可單獨 SELECT。
  • XQuery 路徑中的 [1] 為單一節點限定,必須加上,否則報錯「XQuery 運算式必須為單一節點」。
  • 命名空間:若 XML 含命名空間,需先 WITH XMLNAMESPACES(...) 或在 XQuery 中宣告。
  • 大量更新效能:考慮建立 XML 索引 (Primary/Secondary) 加速路徑定位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved