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

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure 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. varchar, varbinary, nvarchar, 또는 xml 유형입니다.Is varchar, varbinary, nvarchar, or xml type.

주의Remarks

컬렉션에 새 네임 스페이스를 추가 하거나 컬렉션에서 기존 네임 스페이스에 사용 하 여 새 구성 요소를 추가할 수도 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).

PermissionsPermissions

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

1.A. 데이터베이스에 XML 스키마 컬렉션 만들기Creating XML schema collection in the database

다음 예에서는 XML 스키마 컬렉션 ManuInstructionsSchemaCollection을 만듭니다.The following example creates the XML schema collection ManuInstructionsSchemaCollection. 이 컬렉션에는 스키마 네임스페이스가 하나만 있습니다.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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"   
   xmlns          ="http://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.

2.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>';  

다음 예에서는 두 개의 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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"  
    xmlns="http://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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
    xmlns="http://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="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain" >  
    <xs:import   
namespace="http://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  

3.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. 컬렉션으로 가져온 하나 이상의 스키마를 연결하지 않으면 잠재적으로 관련되지 않은 여러 스키마 구성 요소가 기본 빈 문자열 네임스페이스와 연결됩니다.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='';  

4.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