XML DML(XML數據修改語言)是XQuery語言的擴展。根據W3C的定義,XQuery語言缺少數據操作(DML)部分。本節介紹SQL Server 2008中的XML DML,使用它們對可以對XML數據類型進行操作。XML DML將會使用區分大小寫的關鍵字添加到XQuery中,包括:insert、delete和replace value of。
1.插入insert
使用針對XML的DML語句insert,可以向XML文檔中插入屬性或元素,而且還可以指定插入的位置。使用語法如下:
insert
Expression1 (
{as first | as last} into | after | before
Expression2
)
其中,Expression1用於標識要插入的一個或多個節點。into參數可將Expression1標識的節點作爲Expression2標識的節點的直接後代(子節點)插入。如果Expression2中的節點已有一個或多個子節點,則必須使用as first或as last來指定所需的新節點添加位置。after參數作用是將Expression1標識的節點作爲Expression2標識的節點的同級節點直接插入在其後面。before參數作用則與after相反,它會將Expression1標識的節點作爲Expression2標識的節點的同級節點直接插入在其前面。Expression2參數是一個普通的標識節點。
例如,首先聲明一個XML類型的變量EmployeeInfo,再爲其添加XML數據。
DECLARE @EmployeeInfo xml
SET @EmployeeInfo=
'<row>
<員工編號>1018</員工編號>
<員工姓名>祝紅濤</員工姓名>
</row>
'
現在向EmployeeInfo的XML內容中添加一個新元素,新元素的內容爲“<所任職位>員工</所任職位>”,位置爲最底部。編寫如下語句完成插入操作:
SET @EmployeeInfo.modify(
'insert <所任職位>員工</所任職位>
as last
into (/row)[1] '
)
插入完成後,再通過如下語句來查看最終結果:
select @EmployeeInfo
執行上述語句後最初變量EmployeeInfo裏的XML文檔被插入一個新元素“<所任職位>”,現在的結果如下所示:
<row>
<員工編號>1018</員工編號>
<員工姓名>祝紅濤</員工姓名>
<所任職位>員工</所任職位>
</row>
2.delete
delete語句可以刪除XML實例中的元素,它的是語法很簡單,如下所示:
delete Expression
參數Expression用於標識要刪除節點的XQuery表達式。執行時會刪除該表達式選擇的所有節點,以及所選節點中的所有節點或值,而且這個表達式不能是根"/"節點。
例如,使用如下的語句可以將前面在EmployeeInfo變量插入的元素“<所任職位>”。
SET @EmployeeInfo.modify(
'delete /row/所任職位
')
3.replace value of
在前面簡單介紹了使用XML DML的insert和delete語句來插入和刪除XML文檔中的內容,最後來介紹一下如何使用replace value of子句對XML文檔中的節點進行更新。如下所示是它的語法形式:
replace value of
Expression1
with
Expression2
語法中,Expression1參數爲要更新的節點,它必須僅標識一個單個節點,即必須是一個靜態單獨節點。如果XML已類型化,則節點的類型必須是簡單類型,如果選擇了多個節點則會出現錯誤。Expression2則是新節點的值,如果該值是值列表,則update語句將使用此列表替換舊值。
提示 |
在修改類型化的XML實例中,Expression2必須是Expression1的相同類型或子類型。否則將返回錯誤。 |
例如,使用下面的語句可以將前面創建EmployeeInfo變量中的“所任職位”元素的值進行替換,執行後元素的將值從“員工”修改爲“主管”。
SET @EmployeeInfo.modify(
'replace value of(/row/所任職位[1]/text())[1]
with "主管"
')