Share via


xml şema KOLEKSİYONU (Transact-SQL) oluştur

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

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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

Bağımsız değişkenler

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

  • sql_identifier
    SQL xml şema koleksiyontanımlayıcısıdır.

  • Expression
    Bir dize sabit veya skaler değişkendir.Is varchar, varbinary, nvarchar, or xml type.

Açıklamalar

Ayrıca koleksiyon yeni ad alanları eklemek veya yeni bileşenleri koleksiyon içinde varolan ad alanları kullanarak eklemek xml şema KOLEKSİYONU alter.

Koleksiyonları kaldırmak için xml şema KOLEKSİYONU (Transact-SQL) bırak.

İzinler

Bir xml şema KOLEKSİYONU oluşturmak için aşağıdaki izinleri kümesi en az birini gerektirir:

  • Sunucu denetimi izni

  • alter any database izni sunucu üzerinde

  • alter veritabanı izni

  • Veritabanındaki denetim izni

  • alter any schema ve veritabanında xml şema KOLEKSİYONU oluşturma izni

  • xml şema KOLEKSİYONU oluşturma izni veritabanında ve ilişkisel şema üzerinde alter veya Denetim izni

Örnekler

A.Veritabanında xml şema koleksiyon oluşturma

Aşağıdaki örnek xml şema koleksiyonoluştururManuInstructionsSchemaCollection. 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

Alternatif olarak, şema koleksiyon bir değişkene atar ve değişkeni belirtmek 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 

Örneğin, değişkendir nvarchar(max) türü.Değişken de kaynaklanabilir xml hangi durumveri türü bir dizeörtülü olarak dönüştürülür.

Daha fazla bilgi için, bkz. Depolanan xml şema koleksiyonu görüntüleme.

Şema koleksiyonları depolamak isteyebilirsiniz bir xml sütunyazın.Bu durumda, xml şema koleksiyonoluşturmak için aşağıdakileri gerçekleştirin:

  1. Şema koleksiyon , bir select deyim kullanarak sütun almak ve bir değişkene atar xml türü, veya bir varchar türü.

  2. Değişken adını xml şema KOLEKSİYONU oluşturma deyimbelirtin.

xml şema KOLEKSİYONU oluşturmak, yalnızca SQL Server anlar şema bileşenleri depolar; xml Schema'da her şeyi veritabanında depolanmaz.Bu nedenle, xml şema koleksiyon geri tam olarak sağlanan şekilde istediğiniz, xml şemalarınızı veritabanı sütun veya başka bir klasörü bilgisayarınıza kaydetmeniz önerilir.

B.Şema koleksiyonbulunan birden çok şema ad belirtme

Birden çok xml şemaları, xml şema koleksiyonoluştururken 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 koleksiyonoluştururProductDescriptionSchemaCollection içeren iki xml şema ad alanları.

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.hedef ad alanı belirtmeyen bir şema alma

İçermeyen bir şema, bir targetNamespace öznitelik koleksiyonalındığından, bileşenlerinin aşağıdaki örnekte gösterildiği gibi boş dize hedef ad alanıyla ilişkilendirilir.koleksiyon içinde alınan bir veya daha fazla şemaları ilişkilendirme değil birden çok şema bileşenleri (potansiyel ilgisi olmayan) varsayılan boş dize ad alanı ile ilişkili olmasını 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

Şema koleksiyon oluşturulduğu aynı toplu iş başvurulamaz.koleksiyon oluşturulduğu aynı toplu iş başvurusu yapmak çalışırsanız, koleksiyon yok olduğunu söyleyen bir hata iletisi alır.Aşağıdaki örnek çalışır; Ancak, siz kaldırırsanız, GO ve bu nedenle, xml şema koleksiyon yazmak için başvurmak deneyin bir xml aynı toplu işdeğişkeninde bunu döndürür bir hata.

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