2011-12-09 63 views
2

我正在編寫與第三方應用程序交互的應用程序。SQL Server:可變長度XML存儲

第三方應用程序將傳遞我的應用程序幾個原始XML請求。我想將這些請求中的每一個都保存在我的數據庫的通訊記錄中。

什麼是最有效的方式來存儲這個可變長度的數據? VARCHAR(MAX)NVARCHAR(MAX)

如果其中一個比另一個更好(或者我缺少另一個選項),請解釋它爲什麼是最佳選擇。

回答

4

在處理XML時,XML接縫是顯而易見的選擇數據類型,但並非總是如此。

查看Robert Sheldon的這篇文章。 Working with the XML Data Type in SQL

在某些情況下,你不應該使用XML數據類型,而是使用大對象存儲VARCHAR(MAX),NVARCHAR(MAX),或VARBINARY(MAX)。例如,如果您只是將XML文檔存儲在數據庫中,並將這些文檔作爲一個整體進行檢索和更新 - 也就是說,如果您從不需要查詢或修改各個XML組件 - 則應考慮使用其中一種大對象數據類型。對於想要以原始格式保存的XML文件(例如法律文檔)也是如此。如果您需要保留精確的文本副本,請使用大型對象存儲。

7

由於您使用的是SQL Server 2K5,因此存儲XML數據的最佳數據類型爲xml

這提供瞭解析和模式驗證功能。如果需要,它也可以讓你在稍後的index the XML data

2

我已經使用了XML數據類型爲這種類型的事情MSDN link - XML DataType 2005

本地和允許你做一些正常的角度支架事情的實際數據。

更重要的是,我沒有轉換或混淆實際數據,並將實際的XML引入了細微的錯誤。

如果您想對XML進行任何處理,就像渲染它一樣。

缺點是您必須瞭解該列是XML數據,您需要在上游應用程序中對其進行編碼。

1

添加到呸的回答是:

  • VARCHAR(MAX)

XML意味着unicode的,如果你選擇非Unicode存儲則數據丟失是幾乎可以肯定的

  • NVARCHAR(MAX)

合適的,如果你只是要記錄的XML數據

  • XML
,如果你想查詢XML內容後

  • 化的XML與XML架構集合

僅當您有固定的xml架構(XSD)時永遠不會更改。 (據我所知,ALTER XML SCHEMA COLLECTION不支持更新或刪除XML實體)