ALTER XML SCHEMA COLLECTION (Transact-SQL)

Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği

Mevcut bir XML şema koleksiyonuna yeni şema bileşenleri ekler.

Transact-SQL söz dizimi kuralları

Syntax

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

Arguments

relational_schema
İlişkisel şema adını tanımlar. Belirtilmezse, varsayılan ilişkisel şema varsayılır.

sql_identifier
XML şema koleksiyonu için SQL tanımlayıcısıdır.

'ŞemaBileşeni'
Eklenecek şema bileşeni nedir?

Remarks

XML şema koleksiyonunda zaten olmayan yeni XML şemalarını eklemek veya koleksiyondaki mevcut isim alanlarına yeni bileşenler eklemek için kullanabilirsiniz ALTER XML SCHEMA COLLECTION .

Aşağıdaki örnek, koleksiyondaki MyCollmevcut isim alanına https://MySchema/test_xml_schema yeni <bir eleman> ekler.

-- First create an XML schema collection.  
CREATE XML SCHEMA COLLECTION MyColl AS '  
   <schema   
    xmlns="http://www.w3.org/2001/XMLSchema"   
    targetNamespace="https://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="https://MySchema/test_xml_schema">   
     <element name="anotherElement" type="byte"/>   
 </schema>';  

ALTER XML SCHEMADaha önce tanımlanmış isim alanına https://MySchema/test_xml_schemaeleman <anotherElement> ekler.

Koleksiyon referans bileşenlerine eklemek istediğiniz bazı bileşenler zaten aynı koleksiyonda varsa, <import namespace="referenced_component_namespace" />. Ancak, mevcut şema isim alanını 'de <xsd:import>kullanmak geçerli değildir ve bu nedenle mevcut şema isim alanıyla aynı hedef ad alanından bileşenler otomatik olarak içe aktarılır.

Koleksiyonları kaldırmak için (Transact-SQL) kullanınDROP XML SCHEMA COLLECTION.

Şema koleksiyonu zaten bir lax doğrulama joker kartı veya xs:anyType tipi bir eleman içeriyorsa, şema koleksiyonuna yeni bir küresel eleman, tür veya öznitelik bildirimi eklemek, şema koleksiyonu tarafından kısıtlanan tüm depolanan verilerin yeniden doğrulanmasına yol açar.

Permissions

Bir XML SCHEMA COLLECTION değişiklik yapmak için koleksiyon üzerinde ALTER izni gereklidir.

Examples

A. Veritabanında XML şema koleksiyonu oluşturma

Aşağıdaki örnek XML şema koleksiyonunu ManuInstructionsSchemaCollectionoluşturur. Koleksiyonun 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;  

Alternatif olarak, şema koleksiyonunu bir değişkene atayabilir ve deyiminde değişkenini CREATE XML SCHEMA COLLECTION aşağıdaki gibi belirtebilirsiniz:

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

Örnekteki değişken türündedir nvarchar(max) . Değişken ayrıca xml veri tipinde de olabilir; bu durumda örtük olarak bir dizeye dönüştürülür.

Daha fazla bilgi için bkz. Depolanan XML Şema Koleksiyonunu Görüntüleme.

Şema koleksiyonlarını xml tipi bir sütunda depolayabilirsiniz. Bu durumda, XML şema koleksiyonu oluşturmak için aşağıdaki adımları gerçekleştirin:

  1. Şema koleksiyonunu sütundan SELECT ifadesi kullanarak alın ve xml tipli bir değişkene veya varchar tipine atayın.

  2. Deyiminde CREATE XML SCHEMA COLLECTION değişken adını belirtin.

Sadece CREATE XML SCHEMA COLLECTION SQL Server'ın anladığı şema bileşenlerini saklar; XML şemadaki her şey veritabanında saklanmaz. Bu nedenle, XML şema koleksiyonunun tam olarak sağlandığı gibi olmasını istiyorsanız, XML şemalarınızı bir veritabanı sütununa veya bilgisayarınızda başka bir klasöre kaydetmenizi öneririz.

B. Bir şema koleksiyonunda birden fazla şema isim alanı belirtmek

BIR XML şema koleksiyonu oluştururken birden çok XML şeması belirtebilirsiniz. Örneğin:

CREATE XML SCHEMA COLLECTION N'  
<xsd:schema>....</xsd:schema>  
<xsd:schema>...</xsd:schema>';  

Aşağıdaki örnek, iki XML şeması ad alanı içeren XML şema koleksiyonunu ProductDescriptionSchemaCollection oluşturur.

CREATE XML SCHEMA COLLECTION ProductDescriptionSchemaCollection AS   
'<xsd:schema targetNamespace="https://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="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
    xmlns="http://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. Hedef isim alanı belirtmeyen bir şemayı içe aktarma

Bir koleksiyona targetNamespace özniteliği içermeyen bir şema içe aktarılırsa, bileşenleri aşağıdaki örnekte gösterildiği gibi boş dizi hedef isim alanıyla ilişkilendirilir. Koleksiyona bir veya daha fazla şemayı itiştirmemek, varsayılan boş dize isim alanına birden fazla şema bileşeninin (potansiyel olarak alakasız) ilişkilendirilmesine yol açar.

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

Ayrıca Bkz.

CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
OLAY VERILERI (Transact-SQL)
Türlü XML'i Türsüz XML ile Karşılaştır
Sunucudaki XML Şema Koleksiyonları için Gereksinimler ve Sınırlamalar