Udostępnij za pomocą


Opcje zapytania XML i zachowane dane

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

W tym artykule opisano opcje zapytania, które należy określić w celu wykonywania zapytań dotyczących danych XML. Opisuje również części wystąpień XML, które nie są zachowywane podczas przechowywania ich w bazach danych.

Ustawianie wymaganych opcji zapytania

Podczas wykonywania zapytań dotyczących kolumn lub zmiennych typu xml przy użyciu metod typu danych XML należy ustawić następujące opcje, jak pokazano.

Opcje Ustawień Wymagane wartości
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL (łączenie z wartością NULL daje NULL) ON
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER ON

Jeśli opcje nie są ustawione tak, jak pokazano, zapytania i modyfikacje metod typów danych XML nie powiedzą się.

Funkcje wystąpienia XML, które nie są zachowywane

Program SQL Server zachowuje zawartość wystąpienia XML, ale nie zachowuje aspektów wystąpienia XML, które nie są uważane za istotne w modelu danych XML. Oznacza to, że pobrane wystąpienie XML może nie być identyczne z wystąpieniem przechowywanym na serwerze, ale będzie zawierać te same informacje.

Deklaracja XML

Deklaracja XML w wystąpieniu nie jest zachowywana, gdy wystąpienie jest przechowywane w bazie danych. 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 to <doc/>.

Deklaracja XML, taka jak <?xml version='1.0'?>, nie jest zachowywana podczas przechowywania danych XML w wystąpieniu typu danych XML . Jest to celowe. Deklaracja XML () i jego atrybuty (version/encoding/stand-alone) zostaną utracone po przekonwertowaniu danych na typ xml. Deklaracja XML jest traktowana jako dyrektywa analizatora XML. Dane XML są przechowywane wewnętrznie jako ucs-2. Wszystkie inne identyfikatory PI w wystąpieniu XML są zachowywane.

Kolejność atrybutów

Kolejność atrybutów w wystąpieniu XML nie jest zachowywana. Podczas wykonywania zapytań dotyczących wystąpienia XML przechowywanego w kolumnie typu xml kolejność atrybutów w wynikowym pliku XML może być inna niż oryginalne wystąpienie XML.

Znaki cudzysłowu wokół wartości atrybutów

Pojedyncze cudzysłowy i podwójne cudzysłowy wokół wartości atrybutów nie są zachowywane. Wartości atrybutów są przechowywane w bazie danych jako nazwa i para wartości. Znaki cudzysłowu nie są przechowywane. Gdy zapytanie XQuery jest wykonywane względem wystąpienia XML, wynikowy kod XML jest serializowany z podwójnym cudzysłowem wokół wartości atrybutów.

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

Oba zapytania zwracają = <root a="1" />.

Prefiksy przestrzeni nazw

Prefiksy przestrzeni nazw nie są zachowywane. Podczas określania XQuery dla kolumny typu XML wynik serializowanego XML może zwracać różne prefiksy przestrzeni 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 przestrzeni nazw w wyniku może być inny. Przykład:

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

Zobacz także