Delen via


XML-queryopties en bewaarde gegevens

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

In dit artikel worden de queryopties beschreven die u moet opgeven voor het opvragen van XML-gegevens. Ook worden de onderdelen van XML-exemplaren beschreven die niet behouden blijven wanneer ze worden opgeslagen in databases.

Vereiste queryopties instellen

Wanneer u query's uitvoert op kolommen of variabelen met xml-gegevenstypemethoden , moeten de volgende opties worden ingesteld zoals wordt weergegeven.

SET-opties Vereiste waarden
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
NUMERIC_ROUNDABORT OFF
QUOTED_IDENTIFIER ON

Als de opties niet zijn ingesteld zoals weergegeven, mislukken query's en wijzigingen op xml-gegevenstypemethoden .

Functies van een XML-instantie die niet behouden blijven

SQL Server behoudt de inhoud van het XML-exemplaar, maar behoudt geen aspecten van het XML-exemplaar die niet als belangrijk worden beschouwd in het XML-gegevensmodel. Dit betekent dat een opgehaald XML-exemplaar mogelijk niet identiek is aan het exemplaar dat is opgeslagen op de server, maar dezelfde informatie bevat.

XML-declaratie

De XML-declaratie in een exemplaar blijft niet behouden wanneer het exemplaar wordt opgeslagen in de database. Voorbeeld:

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;

Het resultaat is <doc/>.

De XML-declaratie, zoals <?xml version='1.0'?>, blijft niet behouden bij het opslaan van XML-gegevens in een exemplaar van het XML-gegevenstype . Dit is standaard. De XML-declaratie () en de bijbehorende kenmerken (versie/codering/zelfstandig) gaan verloren nadat gegevens zijn geconverteerd naar het type XML. De XML-declaratie wordt behandeld als richtlijn voor de XML-parser. De XML-gegevens worden intern opgeslagen als ucs-2. Alle andere PI's in het XML-exemplaar blijven behouden.

Volgorde van kenmerken

De volgorde van kenmerken in een XML-exemplaar blijft niet behouden. Wanneer u een query uitvoert op het XML-exemplaar dat is opgeslagen in de kolom xml-type , kan de volgorde van kenmerken in de resulterende XML afwijken van het oorspronkelijke XML-exemplaar.

Aanhalingstekens rond kenmerkwaarden

Enkele aanhalingstekens en dubbele aanhalingstekens rond kenmerkwaarden blijven niet behouden. De kenmerkwaarden worden in de database opgeslagen als een naam- en waardepaar. De aanhalingstekens worden niet opgeslagen. Wanneer een XQuery wordt uitgevoerd op basis van een XML-exemplaar, wordt de resulterende XML geserialiseerd met dubbele aanhalingstekens rond de kenmerkwaarden.

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

Beide zoekopdrachten = retourneren <root a="1" />.

Prefixen voor naamruimte

Naamruimtevoorvoegsels blijven niet behouden. Wanneer u XQuery uitvoert op een xml-typekolom, kan het XML-resultaat in geserialiseerde vorm verschillende voorvoegsels voor de naamruimte retourneren.

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

Het voorvoegsel van de naamruimte in het resultaat kan verschillen. Voorbeeld:

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

Zie ook