xml資料以其靈活的資料儲存方式受到廣大開發人員喜愛。在sqlserver2005中存在xml資料型別。我們可以使用這樣的語句對xml資料進行操作
首先定義一段xml 資料:
declare
@xmldata
xml
set@xmldata='
everyday italian
giada de laurentiis
2005
30.00
select
@xmldata
.value(
'bookstore[1]/book[@category="children"][1]/title[1]/@lang',
'varchar(2)')
">
harry potter
j k. rowling
2005
29.99
xquery kick start
james mcgovern
per bothner
kurt cagle
james linn
vaidyanathan nagarajan
2003
49.99
learning xml
erik t. ray
2003
39.95
1、查詢:@xml . query(xpath) xpath 是匹配方式字串。必須是完整的,非拼接而成的字串。'.' 代表本身 '/'代表子節點 '//'代表後代 '*'代表任何
查詢bookstore下所有屬性category="web"的book節點 :
select
@xmldata
. query (
'./bookstore/book[@category="web"]')
查詢最後1個book 節點:
select
@xmldata
. query (
'./booksto
re/book[last()]')
中括號中可以是數字,表示第幾個節點。注意:這裡的數字1表示第乙個節點,爾非0表示第乙個。也可以是這樣:[position()<=2] 表示前2個節點
查詢所有存在lang屬性的節點:(查詢所有後代節點中包含屬性lang的節點)
select
@xmldata
. query (
'//*[@lang]')
同時,查詢可以包含條件: 查詢所有price節點值大於30的price節點
select
@xmldata
. query (
'//price[text() > 30]')
或則更複雜的條件: 查詢所有的book節點,條件是其子節點的title節點的lang屬性值為"en" 並且 year節點的值為"2003"
select
@xmldata
. query (
'//book[./title[@lang="en"] and ./year[text() = "2003"]]')
有時查詢字串可能包含一些引數:如下**:我們可能期望通過這樣的語句查詢所有屬性category="web"的book節點
declare
@parm
varchar
(3
)set
@parm
="web"
select
@xmldata
. query (
'//book[@category = "'+
@parm+'
"]')
但是,這樣是錯誤的。會返回這樣的錯誤:xml 資料型別方法 "query" 的引數 1 必須是字串文字。
通過:sql:variable("@parm")就能解決這樣的問題:
select
@xmldata
. query (
'//book[@category = sql:variable("@parm")]')
另外還存在這樣的查詢方式:
select
@xmldata
. query (
'for $b in bookstore/book where $b/year[text() = "2003"] return ($b)')
select
@xmldata
. query (
'for $b in bookstore/book where $b/author order by $b/price[1] descending return ($b)')
注意:第二行** order by 語句後必須是精確的列,所以要使用[1]。如若不然,如果$b下存在多個price節點,這樣的查詢則不是我們所需要的
除 @xml . query(xpath) 方法外還存在
. exist(xpath) 方法 :
返回0或1,表示xpath所選擇的內容是否存在
. value(xpath,type):
返回xpath所選擇內容的值,在這裡需要制定返回值的型別
為了使xml查詢更加高效,我們可以在xml資料上建立索引,具體方法暫不記錄。
2、修改:@xml . modify(insert) | .modify(replace) | .modify(delete)
將一段xml片段插入到制定節點後(前)after | before
set@xmldata
. modify(
'insert hello after (//book)[last()]')
修改掉price="39.95"的price節點的值為"50.00"
set@xmldata
. modify(
'replace value of (/bookstore/book/price[text()="39.95"]/text())[1] with "50.00"')
刪除所有test節點
set@xmldata
. modify(
'delete //test')
新增屬性:
set@xmldata
.modify (
'insert attribute testatt into (/bookstore/book)[1]')
修改屬性:
set@xmldata
.modify(
'replace value of (/bookstore/book/@testatt)[1] with "80"')
SqlServer2005 操作XML 實戰
xml 大興其道。檔案越來越大。在sqlserver中查詢檢索,會使工作得心應手。常用sql 1.提取關心資料。以表行的形式列出。要注意的是。xquery在解析 xml 文件裡,無素內容是和關鍵字是區分大小寫的。create table t id int,xm xml insert into t i...
SQL Server2005表分割槽處理操作的5步驟
對於大表的資料處理,我們很容易想到對錶進行分割槽,其實就是將乙個表的資料按照某乙個可以進行分段處理的字段進行擷取拆分,儲存的時候通過這個字段觀察,表資料是一段一段的效果 分別存放在不同的檔案組,檔案組又分別存放在不同的硬碟上,這樣通過提高系統的i o來提高系統對資料處理的效能。這裡只記錄如何進行分割...
SQL Server2005複製實現
一 準備工作 1 在發布伺服器上建立乙個共享目錄,作為發布快照檔案的存放目錄。例如 在d 盤根目錄下建資料夾名為pub 2 設定sql 發布伺服器和訂閱伺服器均設定 步驟 開啟服務 控制面板 管理工具 服務 右擊sqlserver agent 屬性 登入 選擇 此帳戶 輸入或選擇第一步中建立的win...