Opzioni di query XML e dati conservati

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

In questo articolo vengono descritte le opzioni query che è necessario specificare per eseguire query sui dati XML. Descrive le parti delle istanze XML che non sono mantenute quando vengono archiviate nei database.

Impostazione di opzioni query obbligatorie

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.

Opzioni SET Valori richiesti
ANSI_NULLS In...
ANSI_PADDING In...
ANSI_WARNINGS In...
ARITHABORT In...
CONCAT_NULL_YIELDS_NULL In...
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER In...

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.

Caratteristiche di un'istanza XML non mantenute

SQL 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. Ciò significa che un'istanza XML recuperata potrebbe non essere identica all'istanza archiviata nel server, ma conterrà le stesse informazioni.

Dichiarazione XML

La dichiarazione XML in un'istanza non viene mantenuta quando l'istanza viene archiviata nel database. Ad esempio:

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

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. Questo si verifica per motivi strutturali. La dichiarazione XML () e i relativi attributi (versione/codifica/autonoma) vengono persi dopo aver convertito in dati nel tipo xml. La dichiarazione XML viene considerata come una direttiva per il parser XML. I dati XML vengono archiviati internamente come ucs-2. Tutte le altre PI nell'istanza XML vengono mantenute.

Ordine degli attributi

L'ordine degli attributi in un'istanza XML non viene mantenuto. 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.

Virgolette che racchiudono i valori attributo

Le virgolette singole e le virgolette doppie che racchiudono i valori di attributi non vengono mantenute. I valori degli attributi vengono archiviati nel database come una coppia di nome e valore, senza le virgolette. 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.

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" />.

Prefissi degli spazi dei nomi

I prefissi degli spazi dei nomi non vengono mantenuti. Quando si specifica XQuery su una colonna di tipo xml , il codice XML serializzato risultante può restituire prefissi dello spazio dei nomi diversi.

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. Ad esempio:

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

Vedi anche