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>