Bagikan melalui


MENGUBAH KOLEKSI SKEMA XML (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menambahkan komponen skema baru ke koleksi skema XML yang ada.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

relational_schema
Mengidentifikasi nama skema relasional. Jika tidak ditentukan, skema relasional default diasumsikan.

sql_identifier
Adalah pengidentifikasi SQL untuk koleksi skema XML.

'Komponen Skema'
Adalah komponen skema yang akan disisipkan.

Keterangan

Gunakan ALTER XML SCHEMA COLLECTION untuk menambahkan skema XML baru yang namespacenya belum ada dalam koleksi skema XML, atau tambahkan komponen baru ke namespace yang sudah ada dalam koleksi.

Contoh berikut menambahkan elemen baru <ke namespace yang https://MySchema/test_xml_schema ada dalam koleksi MyColl.>

-- 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 SCHEMA menambahkan elemen <anotherElement> ke namespace https://MySchema/test_xml_schemayang ditentukan sebelumnya .

Perhatikan bahwa jika beberapa komponen yang ingin Anda tambahkan dalam komponen referensi koleksi yang sudah ada dalam koleksi yang sama, Anda harus menggunakan <import namespace="referenced_component_namespace" />. Namun, tidak valid untuk menggunakan namespace layanan skema saat ini di <xsd:import>, dan oleh karena itu komponen dari namespace target yang sama dengan namespace layanan skema saat ini secara otomatis diimpor.

Untuk menghapus koleksi, gunakan DROP XML SCHEMA COLLECTION (Transact-SQL).

Jika koleksi skema sudah berisi kartubebas validasi laks atau elemen jenis xs:anyType, menambahkan elemen global, jenis, atau deklarasi atribut baru ke koleksi skema akan menyebabkan validasi ulang semua data tersimpan yang dibatasi oleh koleksi skema.

Izin

Untuk mengubah KOLEKSI SKEMA XML memerlukan izin UBAH pada koleksi.

Contoh

J. Membuat kumpulan skema XML dalam database

Contoh berikut membuat koleksi ManuInstructionsSchemaCollectionskema XML . Koleksi hanya memiliki satu namespace skema.

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

Atau, Anda dapat menetapkan koleksi skema ke variabel dan menentukan variabel dalam CREATE XML SCHEMA COLLECTION pernyataan sebagai berikut:

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

Variabel dalam contoh berjenis nvarchar(max) . Variabel juga dapat berupa jenis data xml , dalam hal ini, variabel tersebut secara implisit dikonversi menjadi string.

Untuk informasi selengkapnya, lihat Menampilkan Koleksi Skema XML tersimpan.

Anda dapat menyimpan koleksi skema di kolom jenis xml . Dalam hal ini, untuk membuat koleksi skema XML, lakukan langkah-langkah berikut:

  1. Ambil koleksi skema dari kolom dengan menggunakan pernyataan SELECT dan tetapkan ke variabel jenis xml , atau jenis varchar .

  2. Tentukan nama variabel dalam pernyataan CREATE XML SCHEMA COLLECTION.

CREATE XML SCHEMA COLLECTION hanya menyimpan komponen skema yang dipahami SQL Server; semua yang ada dalam skema XML tidak disimpan dalam database. Oleh karena itu, jika Anda ingin koleksi skema XML kembali persis seperti yang disediakan, kami sarankan Anda menyimpan skema XML Anda di kolom database atau beberapa folder lain di komputer Anda.

B. Menentukan beberapa namespace skema dalam kumpulan skema

Anda dapat menentukan beberapa skema XML saat membuat koleksi skema XML. Misalnya:

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

Contoh berikut membuat kumpulan ProductDescriptionSchemaCollection skema XML yang menyertakan dua namespace skema XML.

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. Mengimpor skema yang tidak menentukan namespace target

Jika skema yang tidak berisi atribut targetNamespace diimpor dalam koleksi, komponennya dikaitkan dengan namespace target string kosong seperti yang ditunjukkan dalam contoh berikut. Perhatikan bahwa tidak mengaitkan satu atau beberapa skema yang diimpor dalam koleksi menghasilkan beberapa komponen skema (berpotensi tidak terkait) yang terkait dengan namespace string kosong default.

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

Lihat Juga

MEMBUAT KOLEKSI SKEMA XML (Transact-SQL)
JATUHKAN KOLEKSI SKEMA XML (Transact-SQL)
EVENTDATA (Transact-SQL)
Membandingkan XML Yang Dititik dengan XML Yang Tidak Dititik
Persyaratan dan Batasan untuk Koleksi Skema XML di Server