一方が他方に依存する 2 つの XML スキーマがあり、いずれかのスキーマによって型が定義されている型付き XML 列を SQL Server に作成したいと考えています (実際には何百ものスキーマがありますが、原則として同じです)。 . 列を作成すると、スキーマ コレクション全体で定義されたすべての型が受け入れられます。1 つの列の型を 1 つの型だけに制限したいと考えています。
<schema targetnamespace="b">
<simpleType name="b">
<restriction base="string"><pattern value="(0[1-9])"/></restriction>
</simpleType>
</schema>
<schema targetnamespace="a" xmlns:b="b">
<element name="b" type="b:b" />
<complexType name="aType">
<sequence>
<element ref="b"/>
</sequence>
</complexType>
<element name="a" type="aType"/>
</schema>
まず、スキーマ コレクションを作成します。
CREATE XML SCHEMA COLLECTION Foo AS N'<above schemas>'
次に、列を作成します
ALTER TABLE FooTable ADD fooCol [xml] (Document [Foo])
XML 型 "a" と "b" の列に値を挿入できるようになりましたが、列の型を "a" だけに制限したいと思います。
異なるタイプごとにカスタマイズされたスキーマ コレクションを手書きする以外に、それを達成する方法はありますか?
更新しました:
提案されたチェック制約に関して-http://blogs.msdn.com/b/denisruc/archive/2006/08/22/713342.aspxによると 、チェック制約は次のようなものになります
CREATE FUNCTION dbo.checkTopElmntIsTypeA(@x XML(MySchemaCollection))
RETURNS bit
AS
BEGIN
RETURN ~(@x.exist('/a:a'))
END
go
- 列の内容を XML 型に制限するためのテーブル定義
CREATE TABLE T(xmlCol XML(MySchemaCollection)
CHECK (1 = dbo.checkTopElmntIsTypeA(xmlCol)))
go
たとえそれがそれほど良くなくても、それはできると思います。:-)