SQL Server 2005的XML支持與異常處理
類型化和非類型化XML的優勢
SQL Server 2005 包括對Transact-SQL (T-SQL) 語言的幾項重要改進。新增功能之一是一種新的觸發器,它在數據定義語言 (DDL) 語句運行時激發。在跟蹤或保護數據庫對象的創建和修改,或對數據庫服務器進行更改時,DDL 觸發器非常有用。另一個新功能涉及異常處理,該功能因包含TRY/CATCH 塊而在異常處理方面向前飛躍了一大步。另一組新功能則以新的XML數據類型為中心,該數據類型在與SQL Server交互的企業應用程序中管理XML數據方面前進了一大部。現在,XML 文檔或片段可以存儲于 XML 列、綁定到架構、還可以利用 XQuery 語法查詢。本文匯總各類問題來做出詳細解答。
問:類型化和非類型化 XML 列各自的優勢是什么?
答:非類型化 XML 列可以存儲所有格式規范的 XML 片段或文檔,而類型化 XML 列可以綁定到 XML 架構。如果不確定 XML 將遵循哪個架構,則非類型化 XML 很有用。例如,如果您必須使用另一個應用程序的某些 XML,但無法確定數據將遵循哪個 XML 架構,則可以使用非類型化 XML 列來執行這項工作。當然,非類型化 XML 也會帶來其他問題。例如,不能針對某個架構編程,因此很難有效地使用 XML。但有時無法避免非類型化 XML。創建非類型化 XML 列非常簡單,如下所示:
CREATE TABLE Foo(FooID INT, someXml XML)
架構不綁定到 XML 列的另一個結果是,SQL Server? 2005 會將非類型化 XML 作為一個字符串存儲。這是件好事還是壞事?實際上,既是好事也是壞事。將 XML 作為字符串存儲使您可以更靈活地存儲任何 XML 片段或文檔。根據應用程序的業務規則,您可能需要這種方式。另一方面,將 XML 作為字符串存儲意味著,與類型化 XML 相比,既不能有效地存儲也不能有效地搜索 XML 數據。并且既不會告訴 SQL Server XML 將包含哪些內容,也不會告訴它層次結構和 XML 節點的數據類型。但請記住,僅僅因為這些是非類型化 XML 列并不意味著它們可以接受您設計出的任何格式。類型化和非類型化 XML 列仍然只接受格式規范的 XML。
如果您要存儲架構已知的 XML 文檔,類型化 XML 列很理想。架構可以定義元素、屬性、它們的數據類型、需要哪些字段以及數據的整個層次結構。由于這種詳細信息有關 XML 列的數據,因此 SQL Server 2005 可以在內部更加有效地存儲 XML 數據。如果您嘗試存儲與架構不匹配的 XML 數據,則 SQL Server 會檢測到這一點并阻止您。
創建類型化 XML 列就像在括號中添加架構名稱一樣簡單,如下所示:
CREATE TABLE Foo(FooID INT, someXml XML(CONTENT FooSchema))
該語句指出 someXml 列必須遵循名為 FooSchema 的 XML 架構集合。通過分別包含相應的關鍵字 DOCUMENT 或 CONTENT,XML 可指定為必須是一個文檔或者可以包含一個片段。如果省略,則默認值為 CONTENT。
可以使用 T-SQL 命令將 XML 架構集合添加到數據庫中,如下所示:
CREATE XML SCHEMA COLLECTION [FooSchema] AS N 'put your schema here'
也可以使用 SQL Server Management Studio (SSMS) 創建 XML 架構集合模板。從 View 菜單打開 Template Explorer,然后導航到 XML Schema Collections 節點并展開它。然后,您可以雙擊 CREATE 模板打開一個模板,該模板為您創建 XML 架構集合提供了一個良好的語法開端(參見圖 1)。
圖1:XML架構集合模板是SSMS
相關文章:
1. 解決Mybatis中mapper.xml文件update,delete及insert返回值問題2. 支持在線寫SQL的Oracle學習免費網站推薦!(個人常使用)3. 使SQL Server數據支持 XML4. 在SQL Server中用XQuery分解XML數據5. SQL Server 2005 讀取xml 文件 突破 varchar 8000 限制6. mybatis中xml之trim屬性說明7. SQL Server 2000中生成XML的小技巧8. SQL SERVER 2000系統支持的跟蹤函數9. 修改默認的Oracle XML Database監聽端口10. 使用SQL查詢DB2 9中的XML數據