実際、SQLServer 2005 XMLは非常によく文書化されていると思います。
CONTENT がデフォルトで、有効な XML を許可します。DOCUMENT はより具体的であり、格納できる XML-Data が単一の最上位ノードのみを持つことが許可されていることを意味します。
作成:
CREATE TABLE XmlCatalog (
ID INT PRIMARY KEY,
Document XML(CONTENT myCollection))
入れる:
INSERT INTO XmlCatalog VALUES (2,
'<doc id="123">
<sections>
<section num="1"><title>XML Schema</title></section>
<section num="3"><title>Benefits</title></section>
<section num="4"><title>Features</title></section>
</sections>
</doc>')
選択する:
SELECT xCol.query('/doc[@id = 123]//section')
FROM XmlCatalog
WHERE xCol.exist ('/doc[@id = 123]') = 1
...等々。クエリ言語は、xpath 1.0 のサブセットで多かれ少なかれ超えています。
XSD を修正すると、挿入と更新がチェックされ、各要素の xml 内に保存されます。ドキュメントを理解している限り、エントリが異なるスキーマを参照できるように、1 つの列に複数のスキーマを追加することもできます。
編集:
わかりました、ドキュメントの特定の部分を読んだ後、私はあなたの問題が何であるかを理解していると思います. その点についての参照はあまり明確ではありませんが、私が理解している限り、XSD スキーマにバインドできるのは 1 つの最上位ノードを持つエントリのみです。
XSD スキーマは、使用される XSD ファイルを定義する単一の最上位ノードを必要とするため、複数の最上位要素を含むフラグメントを検証することはできません。試していませんが、無理だと思います。
ただし、CONTENT 列を定義し、XSD を修正して、XSD を参照する 1 つの最上位ノードを持つ XML と、整形式のみをチェックする XML フラグメントの両方を格納することは有効であるようです。フラグメントには、上記の select ステートメントで示した XPath クエリ言語を使用してアクセスできます。
パフォーマンスへの影響については、多くを語ることはできません。リファレンスでは、XSD がインラインで格納されるため、データベース内に余分なスペースが必要になると述べています。XPath クエリも実行する必要があります。xpathは通常非常に高速であるという事実にもかかわらず、結果を得るために各行で実行する必要があるため、パフォーマンスが低下する可能性があると思います。確かに、保存されたxmlのサイズと複雑さ、およびxpath式に応じて、特定のクエリの実行計画を確認する必要があると思います。