一、 引言
如今,在SQL Server 2005中,XML成為第一流的數(shù)據(jù)類型。借助于基于XML模式的強(qiáng)類型化支持和基于服務(wù)器端的XML數(shù)據(jù)校驗(yàn)功能,現(xiàn)在,開(kāi)發(fā)者可以對(duì)存儲(chǔ)的XML文檔進(jìn)行輕松地遠(yuǎn)程修改。
作為數(shù)據(jù)庫(kù)開(kāi)發(fā)者,許多人都必須大量地涉及XML。
如今,在SQL Server 2005中,你能以一種新的數(shù)據(jù)類型的形式把XML存儲(chǔ)在數(shù)據(jù)庫(kù)中。
事實(shí)上,在SQL Server 2000中就已經(jīng)包括了一些XML特征。其中,最關(guān)鍵的特征是使用FOR XML語(yǔ)句以XML形式返回結(jié)果。SQL Server 2005的功能則明顯不同。在SQL Server 2005中,XML是一種真正的數(shù)據(jù)類型;這意味著,你可以使用XML作為表和視圖中的列,XML可以用于T-SQL語(yǔ)句中或作為存儲(chǔ)過(guò)程的參數(shù)?,F(xiàn)在,你可以直接在數(shù)據(jù)庫(kù)中存儲(chǔ)、查詢和管理XML文件。
更重要的是,現(xiàn)在你還能規(guī)定你的XML必須遵從的模式。
在SQL Server 2005中,除了提供機(jī)制以校驗(yàn)?zāi)愕臄?shù)據(jù)庫(kù)中的XML類型之外,它還允許你描述要被存儲(chǔ)的復(fù)雜數(shù)據(jù)類型并且提供一個(gè)引擎來(lái)強(qiáng)制施加這些規(guī)則。
二、 使用XML數(shù)據(jù)類型
其實(shí),XML數(shù)據(jù)類型與SQL Server中的其它數(shù)據(jù)類型并不存在根本的區(qū)別。你可以把它用在使用任何普通SQL數(shù)據(jù)類型的地方。例如,下列語(yǔ)句創(chuàng)建一個(gè)XML變量并用一個(gè)XML填充它:
DECLARE @doc xml
SELECT @doc = '<Team name="Braves" />'
另外,你還可以使用一個(gè)查詢和SQL Server的FOR XML語(yǔ)法來(lái)填充一個(gè)XML變量:
SELECT @doc =
(SELECT * FROM Person.Contact FOR XML AUTO)
XML數(shù)據(jù)類型不僅可以作為變量使用,也可以應(yīng)用于表列中。你還能分配缺省值并且支持NOT NULL約束:
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指定即可。
下列示例插入一組記錄:
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的實(shí)例時(shí),的轉(zhuǎn)換是從一個(gè)字符串轉(zhuǎn)換成一個(gè)XML類型。同樣,沿著相反的方向,你只可以把XML類型轉(zhuǎn)換成一個(gè)字符串類型。在text和ntext類型之間轉(zhuǎn)換是不允許的。
三、 XML數(shù)據(jù)類型的限制
盡管在SQL Server 2005中XML數(shù)據(jù)類型就象許多其它數(shù)據(jù)類型一樣對(duì)待,但是還存在一些如何使用它的具體限制。這些限制是:
· XML類型不能轉(zhuǎn)換成text或ntext數(shù)據(jù)類型。
· 除了string類型,沒(méi)有其它數(shù)據(jù)類型能夠轉(zhuǎn)換成XML。
· XML列不能應(yīng)用于GROUP BY語(yǔ)句中。
· 分布式局部(partitioned)視圖不能包含XML數(shù)據(jù)類型。
· sql_variant實(shí)例的使用不能把XML作為一種子類型。
· XML列不能成為主鍵或外鍵的一部分。
· XML列不能指定為的。
· COLLATE子句不能被使用在XML列上。
· XML列不能加入到規(guī)則中。
· 可應(yīng)用于XML列的內(nèi)置標(biāo)量函數(shù)是ISNULL和COALESCE。沒(méi)有任何其它內(nèi)置標(biāo)量函數(shù)支持使用XML類型。
· 表中最多只能擁有32個(gè)XML列。
· 具有XML列的表不能有一個(gè)超過(guò)15列的主鍵。
· 具有XML列的表不能有一個(gè)timestamp數(shù)據(jù)類型作為它們的主鍵的一部分。
· 存儲(chǔ)在數(shù)據(jù)庫(kù)中的XML僅支持128級(jí)的層次。
如今,在SQL Server 2005中,XML成為第一流的數(shù)據(jù)類型。借助于基于XML模式的強(qiáng)類型化支持和基于服務(wù)器端的XML數(shù)據(jù)校驗(yàn)功能,現(xiàn)在,開(kāi)發(fā)者可以對(duì)存儲(chǔ)的XML文檔進(jìn)行輕松地遠(yuǎn)程修改。
作為數(shù)據(jù)庫(kù)開(kāi)發(fā)者,許多人都必須大量地涉及XML。
如今,在SQL Server 2005中,你能以一種新的數(shù)據(jù)類型的形式把XML存儲(chǔ)在數(shù)據(jù)庫(kù)中。
事實(shí)上,在SQL Server 2000中就已經(jīng)包括了一些XML特征。其中,最關(guān)鍵的特征是使用FOR XML語(yǔ)句以XML形式返回結(jié)果。SQL Server 2005的功能則明顯不同。在SQL Server 2005中,XML是一種真正的數(shù)據(jù)類型;這意味著,你可以使用XML作為表和視圖中的列,XML可以用于T-SQL語(yǔ)句中或作為存儲(chǔ)過(guò)程的參數(shù)?,F(xiàn)在,你可以直接在數(shù)據(jù)庫(kù)中存儲(chǔ)、查詢和管理XML文件。
更重要的是,現(xiàn)在你還能規(guī)定你的XML必須遵從的模式。
在SQL Server 2005中,除了提供機(jī)制以校驗(yàn)?zāi)愕臄?shù)據(jù)庫(kù)中的XML類型之外,它還允許你描述要被存儲(chǔ)的復(fù)雜數(shù)據(jù)類型并且提供一個(gè)引擎來(lái)強(qiáng)制施加這些規(guī)則。
二、 使用XML數(shù)據(jù)類型
其實(shí),XML數(shù)據(jù)類型與SQL Server中的其它數(shù)據(jù)類型并不存在根本的區(qū)別。你可以把它用在使用任何普通SQL數(shù)據(jù)類型的地方。例如,下列語(yǔ)句創(chuàng)建一個(gè)XML變量并用一個(gè)XML填充它:
DECLARE @doc xml
SELECT @doc = '<Team name="Braves" />'
另外,你還可以使用一個(gè)查詢和SQL Server的FOR XML語(yǔ)法來(lái)填充一個(gè)XML變量:
SELECT @doc =
(SELECT * FROM Person.Contact FOR XML AUTO)
XML數(shù)據(jù)類型不僅可以作為變量使用,也可以應(yīng)用于表列中。你還能分配缺省值并且支持NOT NULL約束:
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指定即可。
下列示例插入一組記錄:
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的實(shí)例時(shí),的轉(zhuǎn)換是從一個(gè)字符串轉(zhuǎn)換成一個(gè)XML類型。同樣,沿著相反的方向,你只可以把XML類型轉(zhuǎn)換成一個(gè)字符串類型。在text和ntext類型之間轉(zhuǎn)換是不允許的。
三、 XML數(shù)據(jù)類型的限制
盡管在SQL Server 2005中XML數(shù)據(jù)類型就象許多其它數(shù)據(jù)類型一樣對(duì)待,但是還存在一些如何使用它的具體限制。這些限制是:
· XML類型不能轉(zhuǎn)換成text或ntext數(shù)據(jù)類型。
· 除了string類型,沒(méi)有其它數(shù)據(jù)類型能夠轉(zhuǎn)換成XML。
· XML列不能應(yīng)用于GROUP BY語(yǔ)句中。
· 分布式局部(partitioned)視圖不能包含XML數(shù)據(jù)類型。
· sql_variant實(shí)例的使用不能把XML作為一種子類型。
· XML列不能成為主鍵或外鍵的一部分。
· XML列不能指定為的。
· COLLATE子句不能被使用在XML列上。
· XML列不能加入到規(guī)則中。
· 可應(yīng)用于XML列的內(nèi)置標(biāo)量函數(shù)是ISNULL和COALESCE。沒(méi)有任何其它內(nèi)置標(biāo)量函數(shù)支持使用XML類型。
· 表中最多只能擁有32個(gè)XML列。
· 具有XML列的表不能有一個(gè)超過(guò)15列的主鍵。
· 具有XML列的表不能有一個(gè)timestamp數(shù)據(jù)類型作為它們的主鍵的一部分。
· 存儲(chǔ)在數(shù)據(jù)庫(kù)中的XML僅支持128級(jí)的層次。

