試用SQL Server 2008增強的XML DML功能

           XML DMLXML數據修改語言)是XQuery語言的擴展。根據W3C的定義,XQuery語言缺少數據操作(DML)部分。本節介紹SQL Server 2008中的XML DML,使用它們對可以對XML數據類型進行操作。XML DML將會使用區分大小寫的關鍵字添加到XQuery中,包括:insertdeletereplace value of

1.插入insert

    使用針對XMLDML語句insert,可以向XML文檔中插入屬性或元素,而且還可以指定插入的位置。使用語法如下:

insert

      Expression1 (

                 {as first | as last} into | after | before

                                    Expression2

                )

    其中,Expression1用於標識要插入的一個或多個節點。into參數可將Expression1標識的節點作爲Expression2標識的節點的直接後代(子節點)插入。如果Expression2中的節點已有一個或多個子節點,則必須使用as firstas last來指定所需的新節點添加位置。after參數作用是將Expression1標識的節點作爲Expression2標識的節點的同級節點直接插入在其後面。before參數作用則與after相反,它會將Expression1標識的節點作爲Expression2標識的節點的同級節點直接插入在其前面。Expression2參數是一個普通的標識節點。

    例如,首先聲明一個XML類型的變量EmployeeInfo,再爲其添加XML數據。

DECLARE @EmployeeInfo xml

SET @EmployeeInfo=

'<row>

  <員工編號>1018</員工編號>

  <員工姓名>祝紅濤</員工姓名>

</row>

'

    現在向EmployeeInfoXML內容中添加一個新元素,新元素的內容爲“<所任職位>員工</所任職位>”,位置爲最底部。編寫如下語句完成插入操作:

SET @EmployeeInfo.modify(

'insert <所任職位>員工</所任職位>

 as last

 into (/row)[1] '

)

    插入完成後,再通過如下語句來查看最終結果:

select @EmployeeInfo

    執行上述語句後最初變量EmployeeInfo裏的XML文檔被插入一個新元素“<所任職位>”,現在的結果如下所示:

<row>

  <員工編號>1018</員工編號>

  <員工姓名>祝紅濤</員工姓名>

  <所任職位>員工</所任職位>

</row>

2delete

    delete語句可以刪除XML實例中的元素,它的是語法很簡單,如下所示:

delete Expression

    參數Expression用於標識要刪除節點的XQuery表達式。執行時會刪除該表達式選擇的所有節點,以及所選節點中的所有節點或值,而且這個表達式不能是根"/"節點。

    例如,使用如下的語句可以將前面在EmployeeInfo變量插入的元素“<所任職位>”。

SET @EmployeeInfo.modify(

'delete /row/所任職位

')

3replace value of

    在前面簡單介紹了使用XML DMLinsertdelete語句來插入和刪除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 "主管"

')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章