Codice XML tipizzato e non tipizzato

È possibile creare variabili, parametri e colonne di tipo xml e inoltre associarvi facoltativamente un insieme di schemi XML. In questo caso, l'istanza del tipo di dati xml è definita come tipizzata. In caso contrario, l'istanza XML è definita come non tipizzata.

Uno schema XML fornisce quanto segue:

  • Vincoli di convalida
    Ogni volta che un'istanza xml tipizzata viene assegnata o modificata, tale istanza viene convalidata da SQL Server.
  • Informazioni sul tipo di dati dell'istanza
    Gli schemi forniscono informazioni sui tipi di attributi e di elementi dell'istanza del tipo di dati xml. Tali informazioni offrono una semantica operativa più precisa per i valori, ad esempio è possibile eseguire le operazioni aritmetiche decimali su un valore decimale, ma non su un valore stringa. Per questo motivo, i tipi di dati XML archiviati possono essere estremamente più compatti rispetto ai dati XML non tipizzati.

Prima di creare variabili, parametri o colonne di tipo xml tipizzate, è necessario registrare l'insieme di schemi XML tramite la sezione dedicata alla creazione di un insieme di schemi XML. È quindi possibile associare l'insieme di schemi XML alle variabili, parametri o colonne di tipo xml . Negli esempi seguenti viene illustrata questa procedura.

Esempi

Negli esempi seguenti, per specificare il nome dell'insieme di schemi XML viene utilizzata una convenzione di denominazione in due parti. La prima parte è il nome dello schema di AdventureWorks e la seconda parte è il nome dell'insieme di schemi XML.

A. Creazione di una variabile di tipo xml e associazione di un insieme di schemi a tale variabile

Nell'esempio seguente viene creata una variabile di tipo xml alla quale viene associato un insieme di schemi. L'insieme di schemi specificato è già stato importato nel database AdventureWorks.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection) 

B. Creazione di una tabella con una colonna di tipo xml e impostazione di uno schema per la colonna

Nell'esempio seguente viene creata una tabella con una colonna di tipo xml e viene specificato uno schema per la colonna:

CREATE TABLE T1(
 Col1 int, 
 Col2 xml (Production.ProductDescriptionSchemaCollection)) 

C. Passaggio di un parametro di tipo xml a una stored procedure

Nell'esempio seguente viene passato un parametro di tipo xml a una stored procedure e viene specificato uno schema per la variabile:

CREATE PROCEDURE SampleProc 
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection) 
AS 

Per l'insieme di schemi XML, si noti quanto segue:

  • Un insieme di schemi XML è disponibile solo nel database in cui è stato registrato come indicato nella sezione relativa alla creazione di un insieme di schemi XML.
  • Se si esegue il cast da una stringa a un tipo di dati xml tipizzato, durante l'analisi vengono inoltre eseguite la convalida e la tipizzazione, in base agli spazi dei nomi degli schemi XML dell'insieme specificato.
  • È possibile eseguire il cast da un tipo di dati xml tipizzato a un tipo di dati xml non tipizzato e viceversa.

Per ulteriori informazioni sugli altri modi disponibili per generare codice XML in SQL Server, vedere Generazione di istanze XML. Dopo avere generato il codice XML, è possibile assegnarlo a una variabile con tipo di dati xml o archiviarlo in colonne di tipo xml per elaborazioni successive.

Nella gerarchia dei tipi di dati, il tipo di dati xml è visualizzato sotto al tipo sql_variant e ai tipi definiti dall'utente, ma sopra ai tipi predefiniti.

D. Impostazione dei facet per vincolare una colonna xml tipizzata

È possibile vincolare le colonne xml tipizzate in modo tale che in ogni istanza archiviata in tali colonne siano consentiti solo elementi principali. A tale scopo, è possibile specificare il facet facoltativo DOCUMENT durante la creazione di una tabella, come illustrato nell'esempio seguente:

CREATE TABLE T(Col1 xml 
   (DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO

Per impostazione predefinita, le istanze archiviate nella colonna xml tipizzata sono archiviate come contenuto XML e non come documenti XML. Ciò consente quanto segue:

  • Zero elementi principali oppure nessuno
  • Nodi di testo negli elementi principali

È inoltre possibile specificare in modo esplicito questo comportamento aggiungendo il facet CONTENT, come illustrato nell'esempio seguente:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default

Si noti che è possibile specificare i facet facoltativi DOCUMENT/CONTENT in qualsiasi posizione in cui si definisce il tipo xml (xml tipizzato). Ad esempio, quando si crea una variabile xml tipizzata, è possibile aggiungere il facet DOCUMENT/CONTENT, come illustrato nell'esempio seguente:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)

Vedere anche

Concetti

Generazione di istanze XML
Linguaggio XML di manipolazione dei dati (XML DML)
Tipo di dati XML
Applicazioni XML di esempio

Altre risorse

Metodi con tipo di dati XML

Guida in linea e informazioni

Assistenza su SQL Server 2005