程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql server中使用T-Sql操作Xml數據

sql server中使用T-Sql操作Xml數據

編輯:關於SqlServer

一、前言

SQLServer 2005 引入了一種稱為 XML 的本機數據類型。用戶可以創建這樣的表,它在關系列之外還有一個或多個 XML 類型的列;此外,還允許帶有變量和參數。為了更好地支持 XML 模型特征(例如文檔順序和遞歸結構),XML 值以內部格式存儲為大型二進制對象 (BLOB)。

用戶將一個XML數據存入數據庫的時候,可以使用這個XML的字符串,SQL Server會自動的將這個字符串轉化為XML類型,並存儲到數據庫中。

隨著SQL Server 對XML字段的支持,相應的,T-SQL語句也提供了大量對XML操作的功能來配合SQL Server中XML字段的使用。本文主要說明如何使用SQL語句對XML進行操作。

二、定義XML字段

在進行數據庫的設計中,我們可以在表設計器中,很方便的將一個字段定義為XML類型。需要注意的是,XML字段不能用來作為主鍵或者索引鍵。同樣,我們也可以使用SQL語句來創建使用XML字段的數據表,下面的語句創建一個名為“docs”的表,該表帶有整型主鍵“pk”和非類型化的 XML 列“xCol”:

CREATE TABLE docs (pk INT PRIMARY KEY, xColXML not null)

XML類型除了在表中使用,還可以在存儲過程、事務、函數等中出現。下面我們來完成我們對XML操作的第一步,使用SQL語句定義一個XML類型的數據,並為它賦值:

declare @xmlDoc xml;  
      
set @xmlDoc='<bookid="0001">  
      
<title>C Program</title>  
      
<author>David</author>  
      
<price>21</price>  
      
</book>'

三、查詢操作

在定義了一個XML類型的數據之後,我們最常用的就是查詢操作,下面我們來介紹如何使用SQL語句來進行查詢操作的。

在T-Sql中,提供了兩個對XML類型數據進行查詢的函數,分別是query(xquery)和value(xquery,dataType),其中,query(xquery)得到的是帶有標簽的數據,而

value(xquery,dataType)得到的則是標簽的內容。接下類我們分別使用這兩個函數來進行查詢。

1、使用query(xquery) 查詢

我們需要得到書的標題(title),使用query(xquery)來進行查詢,查詢語句為:

declare @xmlDoc xml;  
      
set @xmlDoc='<root>  
      
                            <bookid="0001">  
      
                                   <title>C#Program</title>  
      
                                   <author>Jerry</author>  
      
                                   <price>50</price>  
      
                            </book>  
      
                            <bookid="0002">  
      
                                   <title>JavaProgram</title>  
      
                                   <author>Tom</author>  
      
                                   <price>49</price>  
      
                            </book>  
      
                     </root>'
      
select @xmlDoc.query('/root/book/title')  
      
select @xmlDoc.query('(//title)[2]')  
      
select @xmlDoc.query('(root/book[1]/title)')  
      
select @xmlDoc.query('(/root/book/title)[1]')  
      
select @xmlDoc.query('/root/book[position()<2]/title')  
      
       
      
declare @id varchar(max) = '0001'
      
select @xmlDoc.query('/root/book[@id=sql:variable("@id")]/title')

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved