ALTER XML SCHEMA COLLECTION (Transact-SQL)

Aggiunge nuovi componenti di schema a un insieme di schemi XML esistente.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • relational_schema
    Identifica il nome dello schema relazionale. Se viene omesso, viene utilizzato lo schema relazionale predefinito.
  • sql_identifier
    Identificatore SQL per l'insieme di schemi XML.
  • 'Schema Component'
    Componente dello schema da inserire.

Osservazioni

Utilizzare ALTER XML SCHEMA COLLECTION per aggiungere nuovi schemi XML i cui spazi dei nomi non sono già nell'insieme di schemi XML, oppure per aggiungere nuovi componenti a spazi dei nomi esistenti nell'insieme.

Nell'esempio seguente viene aggiunto un nuovo <elemento> allo spazio dei nomi esistente http://MySchema/test_xml_schema nell'insieme 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 aggiunge l'elemento specificato in <anotherElement> allo spazio dei nomi definito precedentemente http://MySchema/test_xml_schema.

Si noti che se alcuni dei componenti che si desidera aggiungere all'insieme fanno riferimento a componenti che sono già nello stesso insieme, è necessario utilizzare <import namespace="referenced_component_namespace" />. Tuttavia, non è consentito utilizzare lo spazio dei nomi dello schema corrente in <xsd:import> e pertanto i componenti dello spazio dei nomi di destinazione corrispondente allo spazio dei nomi dello schema corrente vengono importati automaticamente.

Per rimuovere gli insiemi, utilizzare DROP XML SCHEMA COLLECTION (Transact-SQL).

Autorizzazioni

Per modificare XML SCHEMA COLLECTION è richiesta l'autorizzazione ALTER per l'insieme.

Per ulteriori informazioni, vedere Autorizzazioni per un insieme di schemi XML.

Esempi

A. Creazione di un insieme di schemi XML nel database

Nell'esempio corrente viene creato l'insieme di schemi XML ManuInstructionsSchemaCollection. L'insieme ha solo uno spazio dei nomi di schema.

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

In alternativa, è possibile assegnare l'insieme di schemi a una variabile e specificare la variabile nell'istruzione CREATE XML SCHEMA COLLECTION nel modo descritto di seguito:

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

La variabile utilizzata nell'esempio è di tipo nvarchar(max). È anche possibile utilizzare una variabile di tipo xml, nel cui caso viene convertita in stringa in modo implicito.

Per ulteriori informazioni, vedere Visualizzazione di un insieme di schemi XML archiviato.

È possibile archiviare gli insiemi di schemi in una colonna di tipo xml. In questo caso, per creare un insieme di schemi XML, eseguire la procedura seguente:

  1. Recuperare l'insieme di schemi dalla colonna tramite l'istruzione SELECT e assegnarlo a una variabile di tipo xml o di tipo varchar.
  2. Specificare il nome della variabile nell'istruzione CREATE XML SCHEMA COLLECTION.

L'istruzione CREATE XML SCHEMA COLLECTION archivia solo i componenti dello schema riconosciuti da SQL Server. Non tutti gli elementi contenuti nello schema vengono archiviati nel database. Pertanto, se si desidera una copia esatta dell'insieme di schemi XML, è consigliabile salvare gli schemi XML in una colonna di database o in un'altra cartella nel computer.

B. Specifica di spazi dei nomi relativi a più schemi in un insieme di schemi

È possibile specificare più schemi XML quando si crea un insieme di schemi XML. Ad esempio:

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

Nell'esempio seguente viene creato lo schema XML ProductDescriptionSchemaCollection che include spazi dei nomi relativi a due schemi 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. Importazione di uno schema che non specifica uno spazio dei nomi di destinazione

Se uno schema che non contiene un attributo targetNamespace viene importato in un insieme, i relativi componenti vengono associati allo spazio dei nomi di destinazione della stringa vuota come illustrato nell'esempio seguente. Si noti che la mancata associazione di uno o più schemi importati nell'insieme risulta nell'associazione di più componenti di schema (potenzialmente non correlati) allo spazio dei nomi predefinito della stringa vuota.

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

Vedere anche

Riferimento

CREATE XML SCHEMA COLLECTION (Transact-SQL)
DROP XML SCHEMA COLLECTION (Transact-SQL)
EVENTDATA (Transact-SQL)

Altre risorse

Tipo di dati XML
Codice XML tipizzato e non tipizzato
Eliminazione di un insieme di schemi XML
Modifica di un insieme di schemi XML
Linee guida e limitazioni per l'utilizzo di insiemi di schemi XML nel server

Guida in linea e informazioni

Assistenza su SQL Server 2005