1. 程式人生 > >2、SQL Server 2005中使用XML資料型別

2、SQL Server 2005中使用XML資料型別

這一節將介紹如何用普通的T-SQL語句來操作XML資料。同時介紹了XML資料型別的一些特點。

< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />11.2.1使用XML變數

SQL Server 2005中增加了新的內部資料型別XML。在實際應用時可以完全將XML資料型別理解為普通的INTCHAR等型別。下面就用實際的例子來說明如何使用XML資料型別。< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

/>

/>

啟動SQL Server 2005 Managerment Studio,連線到伺服器,新建一個查詢,輸入如下的語句,單擊執行按鈕。

--定義XML型別的變數

DECLARE @MyXML AS XML

--賦值

SET @MyXML = '<MyXML>Hello XML World!</MyXML>'

--檢視變數的值

SELECT @MyXML

執行結束後,單擊結果中藍色字型顯示的結果。SQL Server Managerment Studio將在一個新的視窗中以XML樹型的方式完整的顯示XML變數內容。

這樣就知道怎樣使用XML型變量了。也許這太簡單了!看上去這好像和普通的字串變數沒有什麼區別,可為什麼要增加這樣一個型別呢?

那麼就假定它只不過是個另類的字串變數吧。接著來試試下面類似的語句,並單擊執行按鈕。

--定義XML型別的變數

DECLARE @MyXML AS XML

--賦值,注意刪除結束標記,製作一個錯誤的XML

SET @MyXML = '<MyXML>Hello XML World! '

--檢視變數的值

SELECT @MyXML

看到如下的出錯資訊了嗎?

訊息9400,級別16,狀態1,第4

XML 分析: 1,字元23,意外的輸入結尾

怎麼樣,理解XML型別能夠幹什麼了吧?它就是為了增強對XML資料操作的處理。它不只是一個簡單的另類字串型別,而是一個帶著完整規則檢查機制的強資料型別。

使用它,就可以不用怕萬一XML的結構被搞錯時,導致一些不必要的麻煩。因為這在SQL Server 2005中是不允許的。SQL Server 2005有完整的機制保障所有的XML型別的資料都是符合XML規範要求的。想犯錯是不容易的!

11.2.2在表中使用XML

學會了使用XML型別的變數,接著來來看看如何在表中使用XML型別的列。

1)建立一個帶XML列的表。

--使用本書建議建立的測試資料庫

Use MyTest1

go

--建立一個使用XML型別列的表

CREATE TABLE MyXMLTb

(

XMLKID int PRIMARY KEY IDENTITY(1,1),

MyXML XML

)

Go

說明:這個表非常的簡單,為了突出XML資料列的特性使用了一個自動的種子列作為主鍵。由此可以看出使用XML型別定義資料列和其它的資料型別是沒有什麼區別的。

2)單擊執行按鈕。

確認MyXMLTb表被建立了。

3)用INSERT插入XML型資料。

INSERT INTO MyXMLTb(MyXML)

VALUES('<Book><Name>Text In SQL</Name><Author AName="Sun"/></Book>')

Go

INSERT INTO MyXMLTb(MyXML)

VALUES('<Student><MainInfo SName="Wang"/><Class>2</Class></Student>')

Go

要注意的是如果文字常量中的值不是正確的XML格式時,插入語句會報錯。這實際上從根本上保證XML列資料的正確性。在SQL Server 2005XML列最大可儲存2GXML資訊,實際上這足夠用了,如果確實還需要儲存超過這一限制的更大的XML,可以使用一些技巧將這種XML資訊拆分到幾個不同的資料行中,或拆分到幾個不同的欄位上。

4單擊執行按鈕。

5)用SELECT查詢XML型資料。

SELECT * FROM MyXMLTb

6)單擊執行按鈕。

執行後可以看到,前面插入的資料已經在表中了。同時不要忘記用滑鼠點選表格結果中的XML列,看一下每一個XML顯示出來後是什麼樣子,以加深對XML的理解。

通過以上步驟,可以總結出XML型別的如下的特點:

XML資料型別可以儲存任何合格的XML資料,而不一定要求格式必須一致。

說明:注意前面的兩行插入語句了嗎?它們的結構是明顯不同的,但都是合法的XML資料,這也說明,在後面的章節中將詳細討論這一特性的優缺點,以及如何在需要的時候限定XML列的詳細格式。

7)修改和刪除XML資料:

要修改XML資料可直接使用UPDATE語句,要刪除表中的XML資料可以直接使用DELETE語句,此處都不再舉例,讀者可以自己去Managerment Studio中做實驗。

至此使用XML型列的基本T-SQL語句操作就介紹完了。從這些內容可以看出從資料型別的角度講XML型別與其它的SQL Server 2005內建資料型別沒有什麼大的區別,因此掌握了一般資料型別的操作方法,XML資料型別也就不是什麼問題了。

11.2.3XML型別的其他用法

除了用作普通的變數或在表中用作列之外,XML資料型別還可以用於其它的SQL Server 2005資料庫物件,比如:

1)用於函式引數

除了將XML型別直接用於表中,還可以將XML型別作為自定義函式的輸入引數或返回值。下面這個例子顯示瞭如何定義這樣的函式:

--建立一個引數為XML型別,並且返回XML型別的自定義函式

Create Function MyXMLFun(@XMLVal As XML)

Returns XML

Begin

Return @XMLVal

End

2)用於儲存過程的引數

同樣的XML資料型別也能夠用來定義儲存過程的輸入輸出引數。請看例子:

CREATE PROCEDURE MyXMLProc

@XMLINVal XML,

@XMLOutVal XML Output

AS

Begin

Set @XMLOutVal = @XMLINVal

End