ALTER XML SCHEMA COLLECTION (Transact-SQL)

gäller för:SQL ServerAzure SQL Managed Instance

Lägger till nya schemakomponenter till en befintlig XML-schemasamling.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

relational_schema
Identifierar namnet på relationsschemat. Om det inte anges antas standardrelationsschemat.

sql_identifier
Är SQL-identifieraren för XML-schemasamlingen.

'Schemakomponent'
Är schemakomponenten som ska infogas.

Remarks

Använd för ALTER XML SCHEMA COLLECTION att lägga till nya XML-scheman vars namnrymder inte redan finns i XML-schemasamlingen, eller lägg till nya komponenter i befintliga namnrymder i samlingen.

Följande exempel lägger till ett nytt <element> i det befintliga namnrymden https://MySchema/test_xml_schema i samlingen 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 lägger till element <anotherElement> i det tidigare definierade namnrymden https://MySchema/test_xml_schema.

Observera att om några av de komponenter du vill lägga till i samlingen refererar till komponenter som redan finns i samma samling, måste du använda <import namespace="referenced_component_namespace" />. Det är dock inte giltigt att använda det aktuella schemanamnrymden i <xsd:import>, och därför importeras komponenter från samma målnamnrymd som det aktuella schemanamnrymden automatiskt.

För att ta bort samlingar, använd DROP XML SCHEMA COLLECTION (Transact-SQL).

Om schemasamlingen redan innehåller ett slappt valideringsjokerkort eller ett element av typen xs:anyType, kommer tillägg av en ny global element-, typ- eller attributdeklaration till schemasamlingen att orsaka en omvalidering av all lagrad data som är begränsad av schemasamlingen.

Permissions

För att ändra en XML SCHEMA COLLECTION kräver ALTER-tillstånd på samlingen.

Examples

A. Skapa XML-schemasamling i databasen

I följande exempel skapas XML-schemasamlingen ManuInstructionsSchemaCollection. Samlingen har bara ett schemanamnområde.

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

Du kan också tilldela schemasamlingen till en variabel och ange variabeln i -instruktionen CREATE XML SCHEMA COLLECTION på följande sätt:

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

Variabeln i exemplet är av nvarchar(max) typen . Variabeln kan också vara av xml-datatyp , i vilket fall den implicit konverteras till en sträng.

Mer information finns i Visa en lagrad XML-schemasamling.

Du kan lagra schema-samlingar i en xml-typkolumn . I det här fallet utför du följande steg för att skapa XML-schemasamling:

  1. Hämta schemasamlingen från kolumnen med en SELECT-sats och tilldela den en variabel av xml-typ eller varchar-typ .

  2. Ange variabelnamnet i -instruktionen CREATE XML SCHEMA COLLECTION .

Den CREATE XML SCHEMA COLLECTION lagrar endast de schemakomponenter som SQL Server förstår; allt i XML-schemat lagras inte i databasen. Därför, om du vill ha XML-schemasamlingen tillbaka exakt som den levererades, rekommenderar vi att du sparar dina XML-scheman i en databaskolumn eller någon annan mapp på din dator.

B. Specificering av flera schemanamnrymder i en schemasamling

Du kan ange flera XML-scheman när du skapar en XML-schemasamling. Ett exempel:

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

I följande exempel skapas XML-schemasamlingen ProductDescriptionSchemaCollection som innehåller två XML-schemanamnområden.

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. Importera ett schema som inte specificerar ett målnamnrymd

Om ett schema som inte innehåller ett targetNamespace-attribut importeras i en samling, kopplas dess komponenter till det tomma målnamnrymden för strängen som visas i följande exempel. Observera att om man inte associerar ett eller flera scheman importerade i samlingen så kopplas flera schemakomponenter (potentiellt orelaterade) till standardnamnrymden för tomma strängar.

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

Se även

CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL)
Jämför typerad XML med otypad XML
Krav och begränsningar för XML-schemasamlingar på servern