Recuperare ed eseguire query su dati XMLRetrieve and Query XML Data

In questo argomento vengono descritte le opzioni query che è necessario specificare per eseguire query sui dati XML.This topic describes the query options that you have to specify to query XML data. Vengono inoltre descritte le parti di istanze XML che non vengono mantenute quando vengono archiviate nei database.It also describes the parts of XML instances that are not preserved when they are stored in databases.

Caratteristiche di un'istanza XML non mantenute Features of an XML Instance That Are Not Preserved

SQL ServerSQL Server mantiene il contenuto dell'istanza XML, ma non mantiene gli aspetti dell'istanza XML che non sono considerati significativi nel modello di dati XML. preserves the content of the XML instance, but does not preserve aspects of the XML instance that are not considered to be significant in the XML data model. Ciò significa che un'istanza XML recuperata potrebbe non essere identica all'istanza archiviata nel server, ma conterrà le stesse informazioni.This means that a retrieved XML instance might not be identical to the instance that was stored in the server, but will contain the same information.

Dichiarazione XMLXML Declaration

La dichiarazione XML in un'istanza non viene mantenuta quando l'istanza viene archiviata nel database.The XML declaration in an instance is not preserved when the instance is stored in the database. Esempio:For example:

CREATE TABLE T1 (Col1 int primary key, Col2 xml)  
GO  
INSERT INTO T1 values (1, '<?xml version="1.0" encoding="windows-1252" ?><doc></doc>')  
GO  
SELECT Col2  
FROM T1  

Il risultato è <doc/>.The result is <doc/>.

La dichiarazione XML, ad esempio <?xml version='1.0'?>, non è mantenuta quando si archiviano i dati XML in un'istanza del tipo di dati xml .The XML declaration, such as <?xml version='1.0'?>, is not preserved when storing XML data in an xml data type instance. Questo si verifica per motivi strutturali.This is by design. La dichiarazione XML () e i relativi attributi (versione/codifica/autonoma) vengono persi dopo aver convertito in dati nel tipo xml.The XML declaration () and its attributes (version/encoding/stand-alone) are lost after data is converted to type xml. La dichiarazione XML viene considerata come una direttiva per il parser XML.The XML declaration is treated as a directive to the XML parser. I dati XML vengono archiviati internamente come ucs-2.The XML data is stored internally as ucs-2. Tutte le altre PI nell'istanza XML vengono mantenute.All other PIs in the XML instance are preserved.

Ordine degli attributiOrder of Attributes

L'ordine degli attributi in un'istanza XML non viene mantenuto.The order of attributes in an XML instance is not preserved. Quando si esegue una query nell'istanza XML archiviata nella colonna di tipo xml , l'ordine degli attributi nel codice XML risultante può essere diverso rispetto all'istanza XML originale.When you query the XML instance stored in the xml type column, the order of attributes in the resulting XML may be different from the original XML instance.

Virgolette che racchiudono i valori attributoQuotation Marks Around Attribute Values

Le virgolette singole e le virgolette doppie che racchiudono i valori di attributi non vengono mantenute.Single quotation marks and double quotations marks around attribute values are not preserved. I valori degli attributi vengono archiviati nel database come una coppia di nome e valore,The attribute values are stored in the database as a name and value pair. senza le virgolette.The quotation marks are not stored. Quando viene eseguita una query XQuery su un'istanza XML, il codice XML risultante viene serializzato con i valori degli attributi racchiusi tra virgolette doppie.When an XQuery is executed against an XML instance, the resulting XML is serialized with double quotation marks around the attribute values.

DECLARE @x xml  
-- Use double quotation marks.  
SET @x = '<root a="1" />'  
SELECT @x  
GO  
DECLARE @x xml  
-- Use single quotation marks.  
SET @x = '<root a=''1'' />'  
SELECT @x  
GO  

Entrambe le query restituiscono = <root a="1" />.Both queries return = <root a="1" />.

Prefissi degli spazi dei nomiNamespace Prefixes

I prefissi degli spazi dei nomi non vengono mantenuti.Namespace prefixes are not preserved. Quando si specifica XQuery su una colonna di tipo xml , il codice XML serializzato risultante può restituire prefissi dello spazio dei nomi diversi.When you specify XQuery against an xml type column, the serialized XML result may return different namespace prefixes.

DECLARE @x xml  
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">  
            <ns2:SomeElement/>  
          </ns1:root>'  
SELECT @x  
SELECT @x.query('/*')  
GO  

È possibile che il prefisso dello spazio dei nomi nel risultato sia diverso.The namespace prefix in the result may be different. Esempio:For example:

<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>  

Impostazione di opzioni query obbligatorie Setting Required Query Options

Quando si esegue una query su variabili o colonne di tipo xml usando i metodi per il tipo di dati xml , è necessario impostare le opzioni seguenti come illustrato.When querying xml type columns or variables using xml data type methods, the following options must be set as shown.

Opzioni SETSET Options Valori richiestiRequired Values
ANSI_NULLSANSI_NULLS ONON
ANSI_PADDINGANSI_PADDING ONON
ANSI_WARNINGSANSI_WARNINGS ONON
ARITHABORTARITHABORT ONON
CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL ONON
NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT OFFOFF
QUOTED_IDENTIFIERQUOTED_IDENTIFIER ONON

Se le opzioni non vengono impostate nel modo indicato, le query e le modifiche eseguite dai metodi per il tipo di dati xml avranno esito negativo.If the options are not set as shown, queries and modifications on xml data type methods will fail.

Vedere ancheSee Also

Creare istanze di dati XMLCreate Instances of XML Data