CREATE XML SCHEMA COLLECTION (Transact-SQL)CREATE XML SCHEMA COLLECTION (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

データベースにスキーマ コンポーネントをインポートします。Imports the schema components into a database.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

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

引数Arguments

relational_schemarelational_schema
リレーショナル スキーマ名を指定します。Identifies the relational schema name. 指定しない場合、既定のリレーショナル スキーマが使用されます。If not specified, default relational schema is assumed.

sql_identifiersql_identifier
XML スキーマ コレクションの SQL 識別子を指定します。Is the SQL identifier for the XML schema collection.

[式]Expression
文字列定数またはスカラー変数を指定します。Is a string constant or scalar variable. varcharvarbinarynvarchar、または xml 型です。Is varchar, varbinary, nvarchar, or xml type.

RemarksRemarks

ALTER XML SCHEMA COLLECTION を使用して、新しい名前空間をコレクションに追加したり、コレクションの既存の名前空間に新しいコンポーネントを追加したりすることもできます。You can also add new namespaces to the collection or add new components to existing namespaces in the collection by using ALTER XML SCHEMA COLLECTION.

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

アクセス許可Permissions

XML SCHEMA COLLECTION を作成するには、少なくとも次のいずれかの権限セットが必要です。To create an XML SCHEMA COLLECTION requires at least one of the following sets of permissions:

  • サーバーに対する CONTROL 権限CONTROL permission on the server

  • サーバーに対する ALTER ANY DATABASE 権限ALTER ANY DATABASE permission on the server

  • データベースに対する ALTER 権限ALTER permission on the database

  • データベースに対する CONTROL 権限CONTROL permission in the database

  • データベースに対する ALTER ANY SCHEMA 権限と CREATE XML SCHEMA COLLECTION 権限ALTER ANY SCHEMA permission and CREATE XML SCHEMA COLLECTION permission in the database

  • リレーショナル スキーマに対する ALTER 権限または CONTROL 権限と、データベースに対する CREATE XML SCHEMA COLLECTION 権限ALTER or CONTROL permission on the relational schema and CREATE XML SCHEMA COLLECTION permission in the database

使用例Examples

A.A. データベースに XML スキーマ コレクションを作成するCreating XML schema collection in the database

次の例では、XML スキーマ コレクション ManuInstructionsSchemaCollection を作成します。The following example creates the XML schema collection ManuInstructionsSchemaCollection. コレクションにはスキーマ名前空間が 1 つだけ含まれます。The collection has only one schema namespace.

-- 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 ステートメントで指定することもできます。Alternatively, you can assign the schema collection to a variable and specify the variable in the CREATE XML SCHEMA COLLECTION statement as follows:

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

この例の変数は nvarchar(max) 型です。The variable in the example is of nvarchar(max) type. 変数のデータ型としては xml も有効です。この場合、変数は暗黙的に文字列に変換されます。The variable can also be of xml data type, in which case, it is implicitly converted to a string.

詳細については、「 格納されている XML スキーマ コレクションの表示」を参照してください。For more information, see View a Stored XML Schema Collection.

スキーマ コレクションを格納する、xml 型の列です。You may store schema collections in an xml type column. この場合、XML スキーマ コレクションを作成するには、次のようにします。In this case, to create XML schema collection, perform the following:

  1. SELECT ステートメントを使用して列からスキーマ コレクションを取得し、xml 型または varchar 型の変数に割り当てます。Retrieve the schema collection from the column by using a SELECT statement and assign it to a variable of xml type, or a varchar type.

  2. CREATE XML SCHEMA COLLECTION ステートメントで変数名を指定します。Specify the variable name in the CREATE XML SCHEMA COLLECTION statement.

CREATE XML SCHEMA COLLECTION には、SQL Server で認識されるスキーマ コンポーネントだけが格納されます。XML スキーマ内のすべての要素がデータベースに格納されるわけではありません。The CREATE XML SCHEMA COLLECTION stores only the schema components that SQL Server understands; everything in the XML schema is not stored in the database. したがって、XML スキーマ コレクションを、提供されたときと同じ状態に戻す場合は、データベース列またはコンピューター上の他のフォルダーに XML スキーマを保存することをお勧めします。Therefore, if you want the XML schema collection back exactly the way it was supplied, we recommend that you save your XML schemas in a database column or some other folder on your computer.

B.B. スキーマ コレクションに複数のスキーマ名前空間を指定するSpecifying multiple schema namespaces in a schema collection

XML スキーマ コレクションを作成するときには、複数の XML スキーマを指定できます。You can specify multiple XML schemas when you create an XML schema collection. 例 :For example:

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 を作成します。The following example creates the XML schema collection ProductDescriptionSchemaCollection that includes two XML schema namespaces.

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="https://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.C. 対象の名前空間が指定されていないスキーマをインポートするImporting a schema that does not specify a target namespace

次の例に示すように、targetNamespace 属性が含まれていないスキーマをコレクションにインポートする場合、スキーマのコンポーネントは空文字列の対象の名前空間に関連付けられます。If a schema that does not contain a targetNamespace attribute is imported in a collection, its components are associated with the empty string target namespace as shown in the following example. コレクションにインポートされる 1 つ以上のスキーマについて関連付けを行わない場合は、複数のスキーマ コンポーネント (場合によっては関係のないコンポーネント) が既定の空文字列の名前空間に関連付けられるため注意してください。Note that not associating one or more schemas imported in the collection causes multiple schema components (potentially unrelated) to be associated with the default empty string namespace.

-- 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.D. XML スキーマ コレクションとバッチを使用するUsing an XML schema collection and batches

スキーマ コレクションを作成したバッチ内で、そのスキーマ コレクションを参照することはできません。A schema collection cannot be referenced in the same batch where it is created. スキーマ コレクションを、作成した同じバッチ内で参照すると、コレクションが存在しないというエラーが発生します。If you try to reference a collection in the same batch where it was created, you will get an error saying the collection does not exist. 次の例は動作しますが、GO を削除し、同じバッチ内で、xml 変数を入力するために XML スキーマ コレクションを参照しようとすると、エラーが返されます。The following example works; however, if you remove GO and, therefore, try to reference the XML schema collection to type an xml variable in the same batch, it will return an error.

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  

参照See Also

ALTER XML SCHEMA COLLECTION (Transact-SQL) ALTER XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
型指定された XML と型指定されていない XML の比較 Compare Typed XML to Untyped XML
DROP XML SCHEMA COLLECTION (Transact-SQL) DROP XML SCHEMA COLLECTION (Transact-SQL)
サーバー上の XML スキーマ コレクションの要件と制限Requirements and Limitations for XML Schema Collections on the Server