Condividi tramite


recupero di dati XML

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.

Questo argomento descrive le parti di istanze XML che non sono mantenute quando vengono archiviate nei database.

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. e ciò per motivi strutturali. La dichiarazione XML (<?xml ... ?>) e i suoi attributi (version/encoding/stand-alone) vengono persi dopo la conversione dei 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>

Vedere anche

Concetti