Aracılığıyla paylaş


XML SCHEMA koleksiyon (Transact-SQL) ALTER

Varolan bir XML şemasına yeni şema bileşenleri ekler koleksiyon.

Topic link iconTransact-SQL sözdizimi kuralları

ALTER XML SCHEMA COLLECTION [ relational_schema. ]sql_identifier ADD 'Schema Component'

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.

  • 'Schema Component'
    Eklemek için şema bileşenidir.

Remarks

Koleksiyon içinde varolan ad yeni bileşenler ekleyin veya ALTER XML SCHEMA KOLEKSIYONU, bu ad zaten XML şema koleksiyonunda olmayan yeni XML şemaları eklemek için kullanın.

Aşağıdaki örnek, yeni bir ekler. <Öğe> Varolan bir ad boşluğuna http://MySchema/test_xml_schema içinde koleksiyon MyColl.

-- First create an XML schema collection.
CREATE XML SCHEMA COLLECTION MyColl AS '
   <schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://MySchema/test_xml_schema">
      <element name="root" type="string"/> 
  </schema>'
-- Modify the collection. 
ALTER XML SCHEMA COLLECTION MyColl ADD '
  <schema xmlns="http://www.w3.org/2001/XMLSchema" 
         targetNamespace="http://MySchema/test_xml_schema"> 
     <element name="anotherElement" type="byte"/> 
 </schema>'

ALTER XML SCHEMA öğe ekler <anotherElement> önceden tanımlanmış ad alanı. http://MySchema/test_xml_schema.

Koleksiyonda eklemek istediğiniz bileşenlerin bazıları aynı koleksiyonunda bulunan bileşenleri başvurursanız, kullanması gerektiğini unutmayın. <import namespace="referenced_component_namespace" />. Ancak geçerli şema ad alanı kullanmak için geçerli değil <xsd:import>, ve bu nedenle aynı hedef ad alanı olarak geçerli şema ad alanından otomatik olarak alınan bileşenleridir.

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

Şema koleksiyon zaten içeriyorsa ondan doğrulama joker karakter veya öğenin türü xs:anyType, yeni genel öğe, tür ve öznitelik bildirisi şema derlemesine ekleyerek, şema koleksiyon tarafından kısıtlanmış bir yeniden doğrulaması saklanan tüm veriler, neden olur.

İzinler

Bir XML SCHEMA koleksiyon değiştirmek için ALTER iznine derlemede gerektirir.

Daha fazla bilgi için bkz:Bir XML şeması derlemesi izinleri.

Ö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 the collection name 
-- that is 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 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ı içinde saklayabilirsiniz bir xml Tür sütun. Bu durumda, XML şema koleksiyon oluşturmak için aşağıdaki adımları 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 şema bileşenleri depolar, SQL Server anladığı; 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 N'
<xsd:schema>....</xsd:schema>
<xsd:schema>...</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 ilişkilendirme varsayılan boş dize ad alanı ile ilişkili (büyük olasılıkla ilgisi olmayan) birden çok şema bileşenleri Koleksiyon sonuçlarında içe 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=''