CREATE XML SCHEMA COLLECTION (Transact-SQL)

データベースにスキーマ コンポーネントをインポートします。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression

引数

  • relational_schema
    リレーショナル スキーマ名を指定します。 指定しない場合、既定のリレーショナル スキーマが使用されます。

  • sql_identifier
    XML スキーマ コレクションの SQL 識別子を指定します。

  • Expression
    文字列定数またはスカラー変数を指定します。 データ型は varchar、varbinary、nvarchar、または xml です。

説明

ALTER XML SCHEMA COLLECTION を使用して、新しい名前空間をコレクションに追加したり、コレクションの既存の名前空間に新しいコンポーネントを追加することもできます。

コレクションを削除するには、DROP XML SCHEMA COLLECTION (Transact-SQL) を使用します。

権限

XML SCHEMA COLLECTION を作成するには、少なくとも次のいずれかの権限セットが必要です。

  • サーバーに対する CONTROL 権限

  • サーバーに対する ALTER ANY DATABASE 権限

  • データベースに対する ALTER 権限

  • データベースに対する CONTROL 権限

  • データベースに対する ALTER ANY SCHEMA 権限と CREATE XML SCHEMA COLLECTION 権限

  • リレーショナル スキーマに対する ALTER 権限または CONTROL 権限と、データベースに対する CREATE XML SCHEMA COLLECTION 権限

使用例

A. データベースに XML スキーマ コレクションを作成する

次の例では、XML スキーマ コレクション ManuInstructionsSchemaCollection を作成します。 コレクションにはスキーマ名前空間が 1 つだけ含まれます。

-- Create a sample database in which to load the XML schema collection.
CREATE DATABASE SampleDB
GO
USE SampleDB
GO
CREATE XML SCHEMA COLLECTION ManuInstructionsSchemaCollection AS
N'<?xml version="1.0" encoding="UTF-16"?>
<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" 
   xmlns          ="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" 
   elementFormDefault="qualified" 
   attributeFormDefault="unqualified"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

    <xsd:complexType name="StepType" mixed="true" >
        <xsd:choice  minOccurs="0" maxOccurs="unbounded" > 
            <xsd:element name="tool" type="xsd:string" />
            <xsd:element name="material" type="xsd:string" />
            <xsd:element name="blueprint" type="xsd:string" />
            <xsd:element name="specs" type="xsd:string" />
            <xsd:element name="diag" type="xsd:string" />
        </xsd:choice> 
    </xsd:complexType>

    <xsd:element  name="root">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element name="Location" minOccurs="1" maxOccurs="unbounded">
                    <xsd:complexType mixed="true">
                        <xsd:sequence>
                            <xsd:element name="step" type="StepType" minOccurs="1" maxOccurs="unbounded" />
                        </xsd:sequence>
                        <xsd:attribute name="LocationID" type="xsd:integer" use="required"/>
                        <xsd:attribute name="SetupHours" type="xsd:decimal" use="optional"/>
                        <xsd:attribute name="MachineHours" type="xsd:decimal" use="optional"/>
                        <xsd:attribute name="LaborHours" type="xsd:decimal" use="optional"/>
                        <xsd:attribute name="LotSize" type="xsd:decimal" use="optional"/>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>' ;
GO
-- Verify - list of collections in the database.
select *
from sys.xml_schema_collections
-- Verify - list of namespaces in the database.
select name
from sys.xml_schema_namespaces

-- Use it. Create a typed xml variable. Note collection name specified.
DECLARE @x xml (ManuInstructionsSchemaCollection)
GO
--Or create a typed xml column.
CREATE TABLE T (
        i int primary key, 
        x xml (ManuInstructionsSchemaCollection))
GO
-- Clean up
DROP TABLE T
GO
DROP XML SCHEMA COLLECTION ManuInstructionsSchemaCollection
Go
USE Master
GO
DROP DATABASE SampleDB

または、次のようにスキーマ コレクションを変数に割り当て、その変数を CREATE XML SCHEMA COLLECTION ステートメントで指定することもできます。

DECLARE @MySchemaCollection nvarchar(max)
Set @MySchemaCollection  = N' copy the schema collection here'
CREATE XML SCHEMA COLLECTION MyCollection AS @MySchemaCollection 

この例の変数のデータ型は nvarchar(max) です。 変数のデータ型としては xml も有効です。この場合、変数は暗黙的に文字列に変換されます。

詳細については、「格納されている XML スキーマ コレクションの表示」を参照してください。

ここで、スキーマ コレクションを xml 型の列に格納するとします。 この場合、XML スキーマ コレクションを作成するには、次のようにします。

  1. SELECT ステートメントを使用して列からスキーマ コレクションを取得し、xml 型または varchar 型の変数に割り当てます。

  2. CREATE XML SCHEMA COLLECTION ステートメントで変数名を指定します。

CREATE XML SCHEMA COLLECTION には、SQL Server で認識されるスキーマ コンポーネントだけが格納されます。XML スキーマ内のすべての要素がデータベースに格納されるわけではありません。 したがって、XML スキーマ コレクションを、提供されたときと同じ状態に戻す場合は、データベース列またはコンピューター上の他のフォルダーに XML スキーマを保存することをお勧めします。

B. スキーマ コレクションに複数のスキーマ名前空間を指定する

XML スキーマ コレクションを作成するときには、複数の XML スキーマを指定できます。 次に例を示します。

CREATE XML SCHEMA COLLECTION MyCollection AS N'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->  
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>'

次の例では、2 つの XML スキーマ名前空間を含む XML スキーマ コレクション ProductDescriptionSchemaCollection を作成します。

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS 
'<xsd:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"
    xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" 
    elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:element name="Warranty"  >
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="WarrantyPeriod" type="xsd:string"  />
                <xsd:element name="Description" type="xsd:string"  />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
 <xs:schema targetNamespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" 
    xmlns="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" 
    elementFormDefault="qualified" 
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >
    <xs:import 
namespace="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" />
    <xs:element name="ProductDescription" type="ProductDescription" />
        <xs:complexType name="ProductDescription">
            <xs:sequence>
                <xs:element name="Summary" type="Summary" minOccurs="0" />
            </xs:sequence>
            <xs:attribute name="ProductModelID" type="xs:string" />
            <xs:attribute name="ProductModelName" type="xs:string" />
        </xs:complexType>
        <xs:complexType name="Summary" mixed="true" >
            <xs:sequence>
                <xs:any processContents="skip" namespace="http://www.w3.org/1999/xhtml" minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
</xs:schema>'
;
GO -- Clean up
DROP XML SCHEMA COLLECTION ProductDescriptionSchemaCollection
GO

C. 対象の名前空間が指定されていないスキーマをインポートする

次の例に示すように、targetNamespace 属性が含まれていないスキーマをコレクションにインポートする場合、スキーマのコンポーネントは空文字列の対象の名前空間に関連付けられます。 コレクションにインポートされる 1 つ以上のスキーマについて関連付けを行わない場合は、複数のスキーマ コンポーネント (場合によっては関係のないコンポーネント) が既定の空文字列の名前空間に関連付けられることになるため注意してください。

-- Create a collection that contains a schema with no target namespace.
CREATE XML SCHEMA COLLECTION MySampleCollection AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema"  xmlns:ns="http://ns">
<element name="e" type="dateTime"/>
</schema>'
go
-- Query will return the names of all the collections that 
--contain a schema with no target namespace.
SELECT sys.xml_schema_collections.name 
FROM   sys.xml_schema_collections 
JOIN   sys.xml_schema_namespaces 
ON     sys.xml_schema_collections.xml_collection_id = 
       sys.xml_schema_namespaces.xml_collection_id 
WHERE  sys.xml_schema_namespaces.name=''

D. XML スキーマ コレクションとバッチを使用する

スキーマ コレクションを作成したバッチ内で、そのスキーマ コレクションを参照することはできません。 スキーマ コレクションを、作成した同じバッチ内で参照すると、コレクションが存在しないというエラーが発生します。 次の例は動作しますが、GO を削除し、同じバッチ内で、xml 変数を入力するために XML スキーマ コレクションを参照しようとすると、エラーが返されます。

CREATE XML SCHEMA COLLECTION mySC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
      <element name="root" type="string"/>
</schema>
'
GO
CREATE TABLE T (Col1 xml (mySC))
GO

関連項目

参照

ALTER XML SCHEMA COLLECTION (Transact-SQL)

DROP XML SCHEMA COLLECTION (Transact-SQL)

EVENTDATA (Transact-SQL)

DROP XML SCHEMA COLLECTION (Transact-SQL)

サーバー上の XML スキーマ コレクションの要件と制限

概念

型指定された XML と型指定されていない XML の比較