Udostępnij przez


Retrieving XML Data

SQL Server zachowuje zawartość XML wystąpienie, ale nie zostaną zachowane aspekty XML wystąpienie, które nie są uważane za znaczący w modelu danych XML.Oznacza to, że pobrane wystąpienie XML nie może być taka sama, jak wystąpienia, 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 wystąpieniu nie jest zachowywany, 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

W rezultacie <doc/>.

Deklaracja XML, takie jak <?xml version='1.0'?>, nie jest zachowywane podczas zapisywania danych XML w xml wystąpienie typu danych. Jest to zgodne z projektem.(Deklaracja XML<? xml... ?>) i jego atrybuty (wersja/kodowania/stand-alone) zostają utracone po konwersji na wpisanie danych xml. Deklaracja XML jest traktowana jako dyrektywa do analizatora składni XML.Dane XML są przechowywane wewnętrznie w postaci ucs-2.Wszystkie inne PIs w kodzie XML wystąpienie są zachowywane.

Kolejność atrybutów

Kolejność atrybutów w wystąpieniu XML nie jest zachowywane.Wykonać kwerendę wystąpienie XML przechowywane w xml Typ kolumna, kolejność atrybutów w wynikowym pliku XML może się różnić od oryginalnego wystąpienia XML.

Znaczniki oferta przetwarzania wartości atrybut

Pojedynczy cudzysłów i podwójnym cudzysłowie wokół wartości atrybut, nie są zachowywane.Wartości atrybut są przechowywane w bazie danych jako para nazwy i wartości.Znaki cudzysłowu nie są przechowywane.Gdy XQuery jest wykonywane przed wystąpienie XML, wynikowy plik XML jest seryjny w znaki cudzysłowu wokół 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 obszaru nazw

Prefiksy obszaru nazw nie są zachowywane.Po określeniu XQuery przed xml kolumna typu serializowane wynik XML może zwracać 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>

See Also

Concepts