国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server2005的XML數據類型之基礎篇

2024-08-31 00:49:43
字體:
來源:轉載
供稿:網友
,歡迎訪問網頁設計愛好者web開發。

一、引言

如今,在sql server 2005中,xml成為第一流的數據類型。借助于基于xml模式的強類型化支持和基于服務器端的xml數據校驗功能,現在

,開發者可以對存儲的xml文檔進行輕松地遠程修改。作為數據庫開發者,許多人都必須大量地涉及xml。

如今,在sql server 2005中,你能以一種新的數據類型的形式把xml存儲在數據庫中。

事實上,在sql server 2000中就已經包括了一些xml特征。其中,最關鍵的特征是使用for xml語句以xml形式返回結果。sql server 2005

的功能則明顯不同。在sql server 2005中,xml是一種真正的數據類型;這意味著,你可以使用xml作為表和視圖中的列,xml可以用于t-sql語

句中或作為存儲過程的參數。現在,你可以直接在數據庫中存儲、查詢和管理xml文件。

更重要的是,現在你還能規定你的xml必須遵從的模式。

在sql server 2005中,除了提供機制以校驗你的數據庫中的xml類型之外,它還允許你描述要被存儲的復雜數據類型并且提供一個引擎來

強制施加這些規則。

二、使用xml數據類型

其實,xml數據類型與sql server中的其它數據類型并不存在根本的區別。你可以把它用在使用任何普通sql數據類型的地方。例如,下列

語句創建一個xml變量并用一個xml填充它:

declare @doc xml

select @doc = '<team name="braves" />'

另外,你還可以使用一個查詢和sql server的for xml語法來填充一個xml變量:

select @doc =

(select * from person.contact for xml auto)

xml數據類型不僅可以作為變量使用,也可以應用于表列中。你還能分配缺省值并且支持not null約束:

以下為引用的內容:

create table team
(
teamid int identity not null,
teamdoc xml default '<team />' not null

注意:sql server 2005的xml功能與sql server 2000中具有明顯的不同。

把xml數據插入到表格中只需要用字符串形式的xml指定即可。

下列示例插入一組記錄:

以下為引用的內容:

insert into team (teamdoc)
values ('
<team name="braves">
<players>
<pitcher name="john smoltz"
role="closer"/>
</players>
</team>');
insert into team (teamdoc)
values ('
<team name="red sox">
<players>
<pitcher name="petro martinez"
role="starter"/>
</players>
</team>');

當在sql server 2005中創建xml的實例時,唯一的轉換是從一個字符串轉換成一個xml類型。同樣,沿著相反的方向,你只可以把xml類型

轉換成一個字符串類型。在text和ntext類型之間轉換是不允許的。

三、xml數據類型的限制

盡管在sql server 2005中xml數據類型就象許多其它數據類型一樣對待,但是還存在一些如何使用它的具體限制。這些限制是:

· xml類型不能轉換成text或ntext數據類型。

· 除了string類型,沒有其它數據類型能夠轉換成xml。

· xml列不能應用于group by語句中。

· 分布式局部(partitioned)視圖不能包含xml數據類型。

· sql_variant實例的使用不能把xml作為一種子類型。

· xml列不能成為主鍵或外鍵的一部分。

· xml列不能指定為唯一的。

· collate子句不能被使用在xml列上。

· xml列不能加入到規則中。

· 唯一可應用于xml列的內置標量函數是isnull和coalesce。沒有任何其它內置標量函數支持使用xml類型。

· 表中最多只能擁有32個xml列。

· 具有xml列的表不能有一個超過15列的主鍵。

· 具有xml列的表不能有一個timestamp數據類型作為它們的主鍵的一部分。

· 存儲在數據庫中的xml僅支持128級的層次。

四、xml類型方法

到此為止,上面的示例已經展示了xml數據類型僅能用作一種blob類型數據,但是這正是xml數據類型顯示其自身力量的地方。xml數據類型

支持使用udt點(myxml.operation())語法進行調用的若干方法。下表1中列舉出所支持的方法。

表格1:xml數據類型方法。

方法名 描述

query  執行一個xml查詢并且返回查詢的結果

exists  執行一個xml查詢,并且如果有結果的話返回值1

value  計算一個查詢以從xml中返回一個簡單的值

modify  在xml文檔的適當位置執行一個修改操作

nodes  允許你把xml分解到一個表結構中

在下面幾節中,你要使用一個表team,它的每一個行中包含一個小組的名字。在每一行中,有一個包含有關于該小組的xml數據的teamdoc

行:

以下為引用的內容:

create table team
(
teamid int identity not null,
teamdoc xml default '<team />' not null
)

在這些例子中,我們假定下面的xml文檔存在于表中的braves行中:

<team name="braves">
<players>
<pitcher name="john smoltz" role="closer"/>
<pitcher name="russ ortiz" role="starter" />
<thirdbase name="chipper jones"
role="starter" bats="switch"/>
</players>
</team> 

query方法

注意:你可以在表和視圖列、t-sql語句或存儲過程的參數中使用xml。

這個方法允許你指定一個要計算的xquery或xpath表達式,該方法的結果是一個xml數據類型對象。它的具體語法形式如下:

query(xquery)

第一個參數總是一個xquery表達式。下面的例子使用一個查詢來返回一個xml文檔-其中包含有關每一個小組的投球手的信息:

select teamdoc.query('/team/players/pitcher')

from team

這個語句產生如下結果:

以下為引用的內容:
----------------------------------------------
<pitcher name="john smoltz" role="closer" />
<pitcher name="russ ortiz" role="starter" />
(1 row(s) affected)

這個query方法允許你查詢和返回與你指定的表達式相匹配的結點列表。該方法的真正威力來自于xquery語法,我們將在本文后面再詳細討

論。

exist方法

這個exist方法用于決定是否一個查詢能夠產生任何結果。這個exist方法的語法形式如下:

exist(xquery)

當你使用這個exist方法時,它計算這個xquery查詢,并且如果該查詢產生任何結果的話返回值1。例如,下面語句查詢小組表行中是否

teamdoc域中存有starter投手:

下面是簡單的exist語句:

以下為引用的內容:
select count(*)
from team
where teamdoc.exist(
'/team/players/pitcher[@role="starter"]') = 1

共2頁: 上一頁 1 [2] 下一頁

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平果县| 彰化市| 永靖县| 年辖:市辖区| 秭归县| 胶州市| 迭部县| 徐水县| 石棉县| 朝阳县| 玉龙| 广平县| 阳春市| 肃北| 武清区| 新营市| 龙游县| 驻马店市| 余江县| 洛宁县| 屯门区| 长宁县| 新巴尔虎右旗| 朝阳区| 湘潭市| 玛曲县| 申扎县| 平顺县| 昌乐县| 盐山县| 玛多县| 迭部县| 千阳县| 奎屯市| 普安县| 鄢陵县| 乌鲁木齐市| 沙坪坝区| 静海县| 西乌珠穆沁旗| 梁平县|