SQL Server2005的XML數據類型之基礎篇
發表于:2008-04-18來源:作者:點擊數:
標簽:sqlSQL
一、 引言 如今,在 SQL Server 2005中,XML成為第一流的數據類型。借助于基于XML模式的強類型化支持和基于 服務器 端的XML數據校驗功能,現在, 開發 者可以對存儲的XML文檔進行輕松地遠程修改。 作為 數據庫 開發者,許多人都必須大量地涉及XML。 如今,在S
一、 引言
如今,在
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語句中或作為存儲過程的參數?,F在,你可以直接在數據庫中存儲、查詢和管理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級的層次。
原文轉自:http://www.kjueaiud.com