日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

SQL Server2005的XML數(shù)據(jù)類型之基礎(chǔ)篇_Mssql數(shù)據(jù)庫教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:刪除數(shù)據(jù)庫中重復(fù)數(shù)據(jù)的幾個方法
方法一 以下為引用的內(nèi)容: declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段

一、引言

如今,在SQL Server 2005中,XML成為第一流的數(shù)據(jù)類型。借助于基于XML模式的強類型化支持和基于服務(wù)器端的XML數(shù)據(jù)校驗功能,現(xiàn)在

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

如今,在SQL Server 2005中,你能以一種新的數(shù)據(jù)類型的形式把XML存儲在數(shù)據(jù)庫中。

事實上,在SQL Server 2000中就已經(jīng)包括了一些XML特征。其中,最關(guān)鍵的特征是使用FOR XML語句以XML形式返回結(jié)果。SQL Server 2005

的功能則明顯不同。在SQL Server 2005中,XML是一種真正的數(shù)據(jù)類型;這意味著,你可以使用XML作為表和視圖中的列,XML可以用于T-SQL語

句中或作為存儲過程的參數(shù)。現(xiàn)在,你可以直接在數(shù)據(jù)庫中存儲、查詢和管理XML文件。

更重要的是,現(xiàn)在你還能規(guī)定你的XML必須遵從的模式。

在SQL Server 2005中,除了提供機制以校驗?zāi)愕臄?shù)據(jù)庫中的XML類型之外,它還允許你描述要被存儲的復(fù)雜數(shù)據(jù)類型并且提供一個引擎來

強制施加這些規(guī)則。

二、使用XML數(shù)據(jù)類型

其實,XML數(shù)據(jù)類型與SQL Server中的其它數(shù)據(jù)類型并不存在根本的區(qū)別。你可以把它用在使用任何普通SQL數(shù)據(jù)類型的地方。例如,下列

語句創(chuàng)建一個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數(shù)據(jù)類型不僅可以作為變量使用,也可以應(yīng)用于表列中。你還能分配缺省值并且支持NOT NULL約束:

以下為引用的內(nèi)容:

CREATE TABLE Team
(
TeamID int identity not null,
TeamDoc XML DEFAULT '<Team />' NOT NULL
)

注意:SQL Server 2005的XML功能與SQL Server 2000中具有明顯的不同。

把XML數(shù)據(jù)插入到表格中只需要用字符串形式的XML指定即可。

下列示例插入一組記錄:

以下為引用的內(nèi)容:

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>');

當(dāng)在SQL Server 2005中創(chuàng)建XML的實例時,唯一的轉(zhuǎn)換是從一個字符串轉(zhuǎn)換成一個XML類型。同樣,沿著相反的方向,你只可以把XML類型

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

三、XML數(shù)據(jù)類型的限制

盡管在SQL Server 2005中XML數(shù)據(jù)類型就象許多其它數(shù)據(jù)類型一樣對待,但是還存在一些如何使用它的具體限制。這些限制是:

· XML類型不能轉(zhuǎn)換成text或ntext數(shù)據(jù)類型。

· 除了string類型,沒有其它數(shù)據(jù)類型能夠轉(zhuǎn)換成XML。

· XML列不能應(yīng)用于GROUP BY語句中。

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

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

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

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

· COLLATE子句不能被使用在XML列上。

· XML列不能加入到規(guī)則中。

· 唯一可應(yīng)用于XML列的內(nèi)置標(biāo)量函數(shù)是ISNULL和COALESCE。沒有任何其它內(nèi)置標(biāo)量函數(shù)支持使用XML類型。

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

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

· 具有XML列的表不能有一個timestamp數(shù)據(jù)類型作為它們的主鍵的一部分。

· 存儲在數(shù)據(jù)庫中的XML僅支持128級的層次。

四、XML類型方法

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

支持使用UDT點(myXML.operation())語法進行調(diào)用的若干方法。下表1中列舉出所支持的方法。

表格1:XML數(shù)據(jù)類型方法。

方法名 描述

query 執(zhí)行一個XML查詢并且返回查詢的結(jié)果

exists 執(zhí)行一個XML查詢,并且如果有結(jié)果的話返回值1

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

modify 在XML文檔的適當(dāng)位置執(zhí)行一個修改操作

nodes 允許你把XML分解到一個表結(jié)構(gòu)中

在下面幾節(jié)中,你要使用一個表Team,它的每一個行中包含一個小組的名字。在每一行中,有一個包含有關(guān)于該小組的XML數(shù)據(jù)的TeamDoc

行:

以下為引用的內(nèi)容:

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語句或存儲過程的參數(shù)中使用XML。

這個方法允許你指定一個要計算的Xquery或XPath表達式,該方法的結(jié)果是一個XML數(shù)據(jù)類型對象。它的具體語法形式如下:

query(XQuery)

第一個參數(shù)總是一個Xquery表達式。下面的例子使用一個查詢來返回一個XML文檔-其中包含有關(guān)每一個小組的投球手的信息:

SELECT TeamDoc.query('/Team/Players/Pitcher')

FROM Team

這個語句產(chǎn)生如下結(jié)果:

以下為引用的內(nèi)容:
----------------------------------------------
<Pitcher name="John Smoltz" role="Closer" />
<Pitcher name="Russ Ortiz" role="Starter" />
(1 row(s) affected)

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

論。

exist方法

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

exist(XQuery)

當(dāng)你使用這個exist方法時,它計算這個XQuery查詢,并且如果該查詢產(chǎn)生任何結(jié)果的話返回值1。例如,下面語句查詢小組表行中是否

TeamDoc域中存有Starter投手:

下面是簡單的Exist語句:

以下為引用的內(nèi)容:
SELECT Count(*)
FROM Team
WHERE TeamDoc.exist(
'/Team/Players/Pitcher[@role="Starter"]') = 1

分享:高手是怎樣煉成的:精妙SQL語句介紹
如何從一位菜鳥蛻變成為高手,靈活使用的SQL語句是必不可少的。本文收集了部分比較經(jīng)典,常用的SQL語句供大家參考,希望對大家有所幫助。 說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b)  

共2頁上一頁12下一頁
來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫教程/更新時間:2008-08-22
相關(guān)Mssql數(shù)據(jù)庫教程