Share via


XML SCHEMA koleksiyon (Transact-SQL) CREATE

Şema bileşenleri, bir veritabanına alır.

Topic link iconTransact-SQL sözdizimi kuralları

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

Bağımsız değişkenler

  • relational_schema
    Ilişkisel bir şema tanımlar.Belirtilmezse, varsayılan ilişkisel şema kabul edilir.

  • sql_identifier
    XML şeması için SQL tanımlayıcısıdır koleksiyon.

  • Expression
    Sabit veya skaler bir dize değişken belirtilir.Iş varchar, varbinary, nvarchar, veya xml yazın.

Remarks

Yeni bir ad için de ekleyebilirsiniz koleksiyon varolan ad boşluklarında yeni bileşenler ekleyin veya koleksiyon kullanarak alter xml ŞEMA koleksiyon.

Topluluklar kaldırmak için kullanın. XML SCHEMA koleksiyon (Transact-SQL) DROP.

İzinler

Bir XML SCHEMA koleksiyon oluşturmak için aşağıdaki izinleri kümeleri en az biri gerekir:

  • Sunucu DENETIM izni

  • Sunucuda HERHANGI bir DATABASE iznine ALTER

  • ALTER veritabanı izni

  • Veritabanındaki DENETIM izni

  • ALTER ANY SCHEMA iznine ve veritabanındaki CREATE XML SCHEMA koleksiyon izni

  • Ilişkisel bir şemayı ve XML SCHEMA koleksiyon CREATE izin veritabanındaki ALTER veya DENETIM izni

Örnekler

C.XML şema koleksiyon veritabanında oluşturma.

Aşağıdaki örnek, XML şema koleksiyon oluşturur. ManuInstructionsSchemaCollection. Koleksiyon yalnızca bir şema ad alanı vardır.

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

Şema koleksiyon bir değişkene atar ve değişken olarak belirlemek isterseniz, CREATE XML SCHEMA COLLECTION deyim aşağıdaki gibi:

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

Örnek değişkeni ilerisindedir nvarchar(max) yazın. Değişken de olabilir xml veri türü, durum, bir dize için örtülü olarak dönüştürülür.

Daha fazla bilgi için bkz:Saklı bir XML şeması topluluk görüntüleme.

Şema koleksiyonları de depolayabilir bir xml Tür sütun. Bu durumda, XML şema koleksiyon oluşturmak için aşağıdakileri gerçekleştirin:

  1. Şema koleksiyon, bir deyim kullanarak sütundan almak ve bunu bir değişkene atar xml Tür, veya varchar yazın.

  2. Değişken adını XML SCHEMA koleksiyon CREATE deyiminde belirtin.

CREATE XML SCHEMA koleksiyon yalnızca SQL Server anladığı şema bileşenleri depolar; XML şemasındaki her şeyi veritabanında depolanır.Bu nedenle, XML şema koleksiyon yeniden sağlanmadı, yolu tam olarak istediğiniz, XML şemalarınızı bir veritabanı sütun veya başka bir klasöre bilgisayarınıza kaydetmeniz önerilir.

b.Bir şema içinde birden çok şema ad belirterek koleksiyon

Bir XML şema koleksiyon oluşturduğunuzda, birden çok XML şemaları belirtebilirsiniz.Örneğin:

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>'

Aşağıdaki örnek, XML şema koleksiyon oluşturur. ProductDescriptionSchemaCollection XML şeması için iki ad içerir.

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.Bir şema hedef ad alanı belirtmiyor alınıyor

Bir şema içeriyor mu yoksa bir targetNamespace özniteliği, alınan bir koleksiyon, bileşenleri aşağıdaki örnekte gösterildiği gibi boş dize hedef ad alanıyla ilişkilidir.Bir veya daha fazla şemalar koleksiyonunda içe ilişkilendirme (büyük olasılıkla ilgisi olmayan) birden çok şema bileşeni varsayılan boş dize ad alanıyla ilişkilendirilmiş neden olduğunu unutmayın.

-- 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.Bir XML şema koleksiyon ve toplu işlemleri kullanma

Bir şema koleksiyon burada oluşturulur aynı toplu iş iş iş başvurulamaz.Aynı toplu iş oluşturulduğu bir koleksiyonunda başvurusu yapmayı denerseniz, koleksiyon yok belirten bir hata alırsınız.Aşağıdaki örnek çalışır; ancak, siz kaldırırsanız, GO ve bu nedenle, yazmanız için bir XML şema koleksiyon başvuru çalışırsanız bir xml değişken, aynı toplu iş iş iş, bir hata döndürecektir.

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