型指定された XML と型指定されていない XML
xml 型の変数、パラメータ、および列を作成できます。必要に応じて、XML スキーマのコレクションを、xml 型の変数、パラメータ、または列に関連付けることができます。XML スキーマ コレクションを関連付けた場合、この xml データ型のインスタンスを「型指定されている」と呼びます。それ以外の場合は、XML インスタンスを「型指定されていない」と呼びます。
XML スキーマでは、次のものが提供されます。
- 検証制約
型指定された xml インスタンスが割り当てまたは変更されるときは、常に、SQL Server によってそのインスタンスが検証されます。 - インスタンス データに関するデータ型の情報
スキーマでは、xml データ型のインスタンス内の属性と要素の型に関する情報が提供されます。この型情報により、演算のより正確なセマンティクスをその値に提供します。たとえば、10 進数の算術演算は 10 進数値では実行できますが、文字列値では実行できません。スキーマで型情報が指定されるので、型指定された XML ストレージは、型指定されていない XML よりも大幅に小さくすることができます。
型指定された xml 変数、パラメータ、または列を作成するには、「CREATE XML SCHEMA COLLECTION (Transact-SQL)」を参考にして、あらかじめ XML スキーマ コレクションを登録しておく必要があります。その後、XML スキーマ コレクションを xml データ型の変数、パラメータ、または列に関連付けることができます。次の例に、この操作を行う方法を示します。
例
次の例では、XML スキーマ コレクション名を指定する際に、2 つの要素で構成された名前付け規則が使用されます。最初の要素は AdventureWorks のスキーマ名で、2 番目の要素は XML スキーマ コレクション名です。
A. xml 型の変数の作成とスキーマ コレクションへの関連付け
次の例では、xml 型の変数を作成し、それにスキーマ コレクションを関連付けます。例で指定されているスキーマ コレクションは、AdventureWorks のデータベースに既にインポートされています。
DECLARE @x xml (Production.ProductDescriptionSchemaCollection)
B. xml 型の列を持つテーブルの作成と列のスキーマの指定
次の例では、xml 型の列を持つテーブルを作成し、列のスキーマを指定します。
CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection))
C. xml 型のパラメータのストアド プロシージャへの受け渡し
次の例では、xml 型のパラメータをストアド プロシージャに渡し、変数にスキーマを指定します。
CREATE PROCEDURE SampleProc
@ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
XML スキーマ コレクションに関して次の点に注意してください。
- XML スキーマ コレクションは、「CREATE XML SCHEMA COLLECTION (Transact-SQL)」を使用して登録されたデータベースでのみ使用できます。
- 文字列から型指定された xml データ型にキャストする場合、指定したコレクションの XML スキーマの名前空間に基づいて、解析時に検証と型指定も行われます。
- 型指定された xml データ型から、型指定されていない xml データ型にキャストできます。その逆も可能です。
SQL Server で XML を生成するその他の方法の詳細については、「XML インスタンスの生成」を参照してください。XML を生成後、それを xml データ型の変数に代入できます。また、その後の処理のために xml 型の列に格納することもできます。
データ型の階層では、xml データ型は sql_variant やユーザー定義型の下、組み込み型の上に表示されます。
D. 型指定された xml 列を制約するためのファセットの指定
型指定された xml 列では、格納されているインスタンスごとに、最上位要素を 1 つだけ許可するように、列を制約できます。これを行うには、次の例で示すように、テーブルを作成するときに、オプションの DOCUMENT
ファセットを指定します。
CREATE TABLE T(Col1 xml
(DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO
既定では、型指定された xml 列に格納されるインスタンスは、XML ドキュメントではなく、XML コンテンツとして格納されます。これにより、次のことが可能になります。
- ゼロ (0) 個以上の最上位要素
- 最上位要素のテキスト ノード
また、次の例に示すように、CONTENT
ファセットを追加することにより、この動作を明示的に指定することもできます。
CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default
xml 型 (型指定された xml) を定義する場所ならどこでも、オプションの DOCUMENT/CONTENT ファセットを指定することができます。たとえば、型指定された xml 変数を作成するときに、次に示すように DOCUMENT/CONTENT ファセットを追加できます。
declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)
参照
概念
XML インスタンスの生成
XML DML (XML データ変更言語)
xml データ型
サンプル XML アプリケーション