Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Azure SQL Database
Azure SQL Istanza gestita
Database SQL in Microsoft Fabric
Importa i componenti di schema in un database.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
CREATE XML SCHEMA COLLECTION [ <relational_schema>. ] sql_identifier AS Expression
Argomenti
relational_schema
Identifica il nome dello schema relazionale. Se viene omesso, viene utilizzato il nome di schema predefinito.
sql_identifier
Identificatore SQL per la raccolta di XML Schema.
Expression
Costante stringa o variabile scalare. È di tipo varchar, varbinary, nvarchar, o xml.
Osservazioni:
È anche possibile aggiungere nuovi spazi dei nomi alla raccolta oppure nuovi componenti a spazi dei nomi esistenti nella raccolta mediante ALTER XML SCHEMA COLLECTION.
Per rimuovere le raccolte, usare DROP XML SCHEMA COLLECTION.
Autorizzazioni
Per creare un'istruzione XML SCHEMA COLLECTION, è richiesto almeno uno dei set di autorizzazioni seguenti:
-
CONTROLautorizzazione per il server -
ALTER ANY DATABASEautorizzazione per il server -
ALTERautorizzazione per il database -
CONTROLautorizzazione nel database -
ALTER ANY SCHEMAautorizzazione eCREATE XML SCHEMA COLLECTIONautorizzazione nel database -
ALTERoCONTROLautorizzazione per lo schema relazionale eCREATE XML SCHEMA COLLECTIONl'autorizzazione nel database
Esempi
R. Creare una raccolta di XML Schema nel database
Nell'esempio corrente viene creata la raccolta di XML Schema ManuInstructionsSchemaCollection. La raccolta 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 collection name specified.
DECLARE @x AS 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 la raccolta di schemi a una variabile e specificare la variabile nell'istruzione CREATE XML SCHEMA COLLECTION nel modo descritto di seguito:
DECLARE @MySchemaCollection AS NVARCHAR (MAX);
SET @MySchemaCollection = N' copy the schema collection here';
CREATE XML SCHEMA COLLECTION MyCollection
AS @MySchemaCollection;
La variabile utilizzata nell'esempio è di tipo nvarchar(max). La variabile può anche essere di tipo di dati xml , nel qual caso viene convertita in modo implicito in una stringa.
Per altre informazioni, vedere Visualizzare una raccolta di XML Schema archiviata.
È possibile archiviare raccolte di schemi in una colonna di tipo xml . In questo caso, per creare una raccolta di XML Schema, seguire questa procedura:
Recuperare la raccolta di schemi dalla colonna usando un'istruzione
SELECTe assegnarla a una variabile di tipo xml o a un tipo varchar .Specificare il nome della variabile nell'istruzione
CREATE XML SCHEMA COLLECTION.
CREATE XML SCHEMA COLLECTION Archivia solo i componenti dello schema che SQL Server riconosce. Tutti gli elementi nello schema XML non vengono archiviati nel database. Pertanto, se si desidera che la raccolta di XML Schema venga restituita esattamente nel modo in cui è stata fornita, è necessario salvare gli XML Schema in una colonna di database o in un'altra cartella nel computer.
B. Specificare più spazi dei nomi dello schema in una raccolta di schemi
È possibile specificare più XML Schema quando si crea una raccolta di XML Schema. 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 creata la raccolta di XML Schema ProductDescriptionSchemaCollection che include spazi dei nomi relativi a due XML Schema.
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. Importare uno schema che non specifica uno spazio dei nomi di destinazione
Se uno schema che non contiene un targetNamespace attributo viene importato in una raccolta, i relativi componenti sono associati allo spazio dei nomi di destinazione stringa vuoto, come illustrato nell'esempio seguente. L'associazione di uno o più schemi importati nella raccolta causa l'associazione di più componenti dello schema (potenzialmente non correlati) allo spazio dei nomi 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
INNER 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. Usare una raccolta e batch di XML Schema
Non è possibile fare riferimento a una raccolta di schemi nello stesso batch in cui è stata creata. Se si tenta di fare riferimento a una raccolta nello stesso batch in cui è stata creata, viene visualizzato un errore che indica che la raccolta non esiste. L'esempio seguente funziona; Tuttavia, se si rimuove GO e, di conseguenza, si tenta di fare riferimento alla raccolta di XML Schema per digitare una variabile XML nello stesso batch, viene restituito 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