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資料型別理解為普通的INT、CHAR等型別。下面就用實際的例子來說明如何使用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 2005中XML列最大可儲存2G的XML資訊,實際上這足夠用了,如果確實還需要儲存超過這一限制的更大的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