SQL中XQuery XML的應用

2021-07-27 15:41:35 字數 2277 閱讀 8258

xml及sql作為兩種儲存資料的主流方式,各自有各自的優勢.為此主流的資料庫產品中陸續的加入了對xml的支援.

1.對於sql返回的結果集可以對其進行xml轉換.

2.在ms sql2005中加入了xml型別.允許將xml資料存入對應的表列中,並且也實現了結合xquery(部分功能未實現)來對xml資料進行操作的功能.

建立對應的資料庫及表資訊.

create database people;

use people;

create table people (id int identity primary key,firstname text not null,lastname text not null,age int not null,*** varchar(10) not null)

初始化資料.

insert into people values ('ricky','lin',30,'male');

insert into people values ('jennie','lin',30,'female');

查詢資料並以xml格式返回.

select id [@id],firstname [name/firstname],lastname [name/lastname],age [age],*** [***] from people for xml path('person'),root('people')
獲取到的結果.

ricky

lin 30

male

jennie

lin 30

female

另外還有for xml auto / for xml raw 等選項也可以支援xml輸出.並可以新增對應的引數來豐富輸出的格式.

2.sql對於xml的支援更重要的表現在xml型別的儲存和操作.以下主要說明的是modify/query這兩個函式.其中主要的應用是針對xquery.

declare @original xml;

set @original =

'ricky

lin';

/*modify*/

declare @delete xml;

declare @insert xml;

declare @replace xml;

set @delete = @original;

set @insert = @original;

set @replace = @original;

set @delete.modify('delete /person/*[1]') ;

select @delete 'delete';/*delete firstname element.*/

set @insert.modify('insert ok after (/person/firstname)[1]');

select @insert 'insert';/*insert the middle name after firstname*/

declare @replacement varchar(20);

set @replacement = 'jennie';

set @replace.modify('replace value of (/person/firstname/text())[1] with sql:variable("@replacement")');

select @replace 'replace';/*replace the firstname 'ricky' to 'jennie'*/

modify函式主要提供了三種方式對xml型別資料的修改.

delete/replace/insert. 其引數中主要應用了xquery/xpath來獲取對應的節點以供操作.

以下例子是使用query函式來處理帶命名空間的的情況.

declare @data xml;

set @data =

'ricky

lin'

;select @data.query('

declare namespace ricky = "";

-') result;

在sql與xml結合使用的過程中,主要的應用實現行是針對於xquery.當然或許現階段sql並無法完全的相容xquery語法.但是已經足夠了日常需求.

Spring中transaction的應用

spring框架的事務基礎架構 將預設地 只 在丟擲執行時和unchecked exceptions時才標識事務回滾 當出現異常,都可以進行回滾,可以在catch塊中使用下面一行 這種方法是手工進行設定事務回滾 transactionaspectsupport.currenttransactions...

Spring中FactoryBean的應用

factorybean介面定義了以下3個介面方法 object getobject 返回有factorybean建立的bean例項,如果issingleton 返回true,則該例項會放到spring容器的單例項快取池中。boolean issingleton 確定由factorybean建立bea...

OpenGL中gluLookAt 函式的應用

今天寫了乙個自己的camera 宣告如下 include vector3.h ifndef camera h define camera h namespace learnopengl endif 其中setcamera 成員函式用來指定攝像機所處位置,觀察點位置和向上的向量,定義如下 void l...