Condividi tramite


CREATE XML SCHEMA COLLECTION (Transact-SQL)

Importa i componenti di schema in un database.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

CREATE XML SCHEMA COLLECTION [ <relational_schema>. ]sql_identifier AS Expression

Argomenti

  • relational_schema
    Identifica il nome di schema relazionale. Se viene omesso, viene utilizzato il nome di schema predefinito.
  • sql_identifier
    Identificatore SQL per l'insieme di schemi XML.
  • Expression
    Costante stringa o variabile scalare di tipo varchar, varbinary, nvarchar, nvarbinary o xml.

Osservazioni

È inoltre possibile aggiungere nuovi spazi dei nomi all'insieme oppure nuovi componenti a spazi dei nomi esistenti nell'insieme mediante ALTER XML SCHEMA COLLECTION.

Per rimuovere gli insiemi, utilizzare DROP XML SCHEMA COLLECTION.

Autorizzazioni

Per creare un'istruzione XML SCHEMA COLLECTION, è richiesto almeno uno dei set di autorizzazioni seguenti:

  • Autorizzazione CONTROL per il server
  • Autorizzazione ALTER ANY DATABASE per il server
  • Autorizzazione ALTER per il database
  • Autorizzazione CONTROL per il database
  • Autorizzazioni ALTER ANY SCHEMA e CREATE XML SCHEMA COLLECTION per il database
  • Autorizzazione ALTER o CONTROL per lo schema relazionale e autorizzazione CREATE XML SCHEMA COLLECTION per il database

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

Esempi

A. Creazione di un insieme di schemi XML nel database

Nell'esempio seguente viene creato l'insieme di schemi XML ManuInstructionsSchemaCollection. L'insieme include 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 collection name 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 illustrato di seguito:

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

La variabile nell'esempio è di tipo nvarchar(max). La variabile può inoltre essere di tipo xml e in questo caso viene convertita in modo implicito in stringa.

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

È possibile archiviare insiemi di schemi in una colonna di tipo xml. In questo caso, per creare un insieme di schemi XML, procedere nel modo seguente:

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

L'istruzione CREATE XML SCHEMA COLLECTION archivia solo i componenti di schema supportati da SQL Server. Il contenuto dello schema XML non viene archiviato nel database. Pertanto, se si desidera recuperare l'insieme di schemi XML nello stesso modo in cui è stato specificato, è consigliabile salvare gli schemi XML in una colonna di database o in un'altra cartella del computer.

B. Impostazione di più spazi dei nomi di schema in un insieme di schemi

È possibile specificare più schemi XML durante la creazione di un insieme di schemi XML. Ad esempio:

CREATE XML SCHEMA COLLECTION MyCollection AS N'
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->  
</xsd:schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!-- Contents of schema here -->
</xsd:schema>'

Nell'esempio seguente viene creato l'insieme di schemi XML ProductDescriptionSchemaCollection che include due spazi dei nomi dello schema 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 con nome uguale a una stringa vuota come illustrato nell'esempio seguente. La mancata associazione di uno o più schemi importati nell'insieme comporta l'associazione di più componenti di schema (potenzialmente non correlati) allo spazio dei nomi a stringa vuota predefinito.

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

D. Utilizzo di un insieme di schemi XML e di batch

Non è possibile fare riferimento a un insieme di schemi nello stesso batch in cui è stato creato. Se si cerca di fare riferimento a un insieme nello stesso batch in cui è stato creato, verrà generato un errore indicante che l'insieme non esiste. L'esempio seguente funziona correttamente. Se, tuttavia, si rimuove GO e si cerca di creare un riferimento tra l'insieme di schemi XML e una variabile di tipo xml nello stesso batch, verrà generato un errore.

CREATE XML SCHEMA COLLECTION mySC AS '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
      <element name="root" type="string"/>
</schema>
'
GO
CREATE TABLE T (Col1 xml (mySC))
GO

Vedere anche

Riferimento

ALTER 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
How to: Create an XML Schema in Visual Basic .NET

Guida in linea e informazioni

Assistenza su SQL Server 2005