ALTER XML SCHEMA COLLECTION (Transact-SQL)

Dodaje nowe składniki schematu istniejącą kolekcja schematu XML.

Topic link iconKonwencje składni języka Transact-SQL

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

Argumenty

  • relational_schema
    Identyfikuje nazwę schematu relacyjnego.Jeśli nie zostanie określony, przyjmowana jest wartość domyślnego schematu relacyjnego.

  • sql_identifier
    Jest identyfikatorem SQL dla kolekcja schematu XML.

  • 'Schema Component'
    Jest to składnik schematu do wstawienia.

Remarks

Za pomocą instrukcji ALTER kolekcja SCHEMATU XML do dodawania nowych schematów XML, którego obszarach nazw nie są już w kolekcja schematu XML lub dodać nowe składniki do istniejących obszarów nazw w kolekcja.

W następującym przykładzie dodano nowy <element> do istniejącego obszaru nazw http://MySchema/test_xml_schema w kolekcja 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 Dodaje element <anotherElement> z wcześniej zdefiniowanych nazw http://MySchema/test_xml_schema.

Należy zauważyć, że niektóre składniki, które chcesz dodać w kolekcja odwołać składników, które znajdują się już do tego samego zbioru, należy użyć <import namespace="referenced_component_namespace" />. Jednak nie jest prawidłowe, należy użyć bieżącego obszaru nazw schematu w <xsd:import>, a w związku z tym składniki z tej samej miejsce docelowe obszar nazw jako bieżący obszar nazw schematu są automatycznie importowane.

Aby usunąć kolekcje, należy użyć DROP kolekcja SCHEMATU XML (języka Transact-SQL).

Jeśli kolekcja schematu już zawiera symbol wieloznaczny łagodnymi sprawdzania poprawności lub element typu xs:anyType, dodawanie do kolekcji schematu nowy element globalny, typ lub deklaracja atrybut spowoduje, że revalidation przechowywanych danych, które jest ograniczony przez opcję kolekcji schematu.

Uprawnienia

Aby zmienić kolekcja SCHEMATU XML wymaga uprawnienia ALTER w zbiorze.

Aby uzyskać więcej informacji zobaczPermissions on an XML Schema Collection.

Przykłady

A.Tworzenie kolekcja schematu XML, bazy danych

Poniższy przykład tworzy kolekcja schematu XML ManuInstructionsSchemaCollection. Kolekcja jest tylko jeden obszar nazw schematu.

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

Alternatywnie, można przypisać do zmiennej w kolekcja schematu i określić zmienną w CREATE XML SCHEMA COLLECTION Instrukcja w następujący sposób:

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

Zmienna w przykładzie jest nvarchar(max) Typ. Mogą również być zmiennej xml Typ danych, w którym to przypadek niejawnie jest ona konwertowana na ciąg znaków.

Aby uzyskać więcej informacji zobaczViewing a Stored XML Schema Collection.

Można przechowywać kolekcji schematu w xml Typ kolumna. W takim przypadek należy utworzyć kolekcja schematu XML, należy wykonać następujące czynności:

  1. Pobrać kolekcja schematu z kolumna za pomocą instrukcja SELECT i przypisać ją do zmiennej xml tekst, lub varchar Typ.

  2. Określ nazwę zmiennej w instrukcja CREATE kolekcja SCHEMATU XML.

CREATE kolekcja SCHEMATU XML są przechowywane tylko składniki schematu, SQL Server zrozumienie; wszystkie elementy w schemacie XML nie jest przechowywana w bazie danych. Jeśli chcesz ponownie kolekcja schematu XML dokładnie tak jak zostały dostarczone, firma Microsoft zaleca, aby zapisać swoją schematów XML kolumna bazy danych lub niektórych innego folderu na komputerze.

B.Określanie wielu obszarów nazw w schemacie w kolekcja schematu

Po utworzeniu kolekcja schematu XML, można określić wiele schematów XML.Na przykład:

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

Poniższy przykład tworzy kolekcja schematu XML ProductDescriptionSchemaCollection które zawiera dwa obszary nazw schematu XML.

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.Importowanie schematu, których nie określono docelowego obszaru nazw

Jeśli schemat, który nie zawiera miejsce docelowe obszar nazw atrybut jest importowany w kolekcja, jego składniki są skojarzone z obszarem nazw miejsce docelowe pusty ciąg znaków, jak pokazano w poniższym przykładzie.Należy zauważyć, że nie kojarzenia jednego lub więcej schematów importowane w kolekcja skutkuje wiele schematów składników (potencjalnie niepowiązanych) z pustego ciąg domyślny obszar nazw.

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