1

一方が他方に依存する 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

たとえそれがそれほど良くなくても、それはできると思います。:-)

4

0 に答える 0