Udostępnij za pośrednictwem


Pobieranie danych XML

SQL Server zachowuje zawartość XML wystąpienie, ale nie zachowuje aspektów XML wystąpienie , nie są uważane za znaczący w modelu danych XML.Oznacza to, że pobrane instancję XML mogą być identyczne do wystąpienie, które są przechowywane na serwerze, ale będzie zawierać te same informacje.

W tym temacie opisano elementy XML wystąpienia, które nie są zachowywane, gdy są one przechowywane w bazach danych.

Deklaracja XML

Deklaracja XML w instancji nie jest zachowywane, gdy wystąpienie jest przechowywany w bazie danych.Na przykład:

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

Wynik jest <doc/>.

Deklaracja XML, takich jak <?xml version='1.0'?>, nie jest zachowywane podczas przechowywania danych XML w xml Typ danych wystąpienie.Jest to zgodne z projektem.Deklaracja XML (<? xml...?>) i jego atrybuty (wersja/kodowanie/stand-alone) są tracone po przekonwertowaniu danych wpisz xml.Deklaracja XML jest traktowana jako dyrektywy do analizatora składni XML.Dane XML są wewnętrznie przechowywane jako ucs-2.Inne instrukcje przetwarzania XML wystąpienie są zachowywane.

Kolejność atrybutów

Kolejność atrybutów XML wystąpienie nie jest zachowywany.Podczas przeszukiwania XML wystąpienie w xml kolumna typu kolejność atrybutów w wynikowym pliku XML może się różnić od oryginalnego XML wystąpienie.

Cudzysłów wartości atrybutu

Pojedynczy cudzysłów i podwójnym cudzysłowie wokół wartości atrybut nie są zachowywane.Wartości atrybut są przechowywane w bazie danych jako parę nazwy i wartości.Znaki cudzysłowu nie są przechowywane.Gdy wykonywane XQuery XML wystąpienie, wynikowy plik XML jest seryjny w podwójny cudzysłów wartości atrybut.

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

Zarówno kwerendy zwracają = <root a="1" />.

Prefiksy obszarów nazw

Prefiksy obszarów nazw nie są zachowywane.Po określeniu XQuery przeciwko xml kolumna Typ serializowany wyników XML może zwrócić prefiksy inny obszar nazw.

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

Prefiks obszaru nazw w wyniku mogą być różne.Na przykład:

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

Zobacz także

Koncepcje