Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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>