XML-frågealternativ och bevarade data

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

I den här artikeln beskrivs de frågealternativ som du måste ange för att köra frågor mot XML-data. Den beskriver också de delar av XML-instanser som inte bevaras när de lagras i databaser.

Ange obligatoriska frågealternativ

När du kör frågor mot xml-typkolumner eller variabler med hjälp av xml-datatypsmetoder måste följande alternativ anges som de visas.

SET-alternativ Obligatoriska värden
ANSI_NULLS ON
ANSI_PADDING ON
ANSI_WARNINGS ON
ARITHABORT ON
CONCAT_NULL_YIELDS_NULL ON
NUMERISK_AVRUND_AVBRYT AV
QUOTED_IDENTIFIER ON

Om alternativen inte anges som de visas misslyckas frågor och ändringar av xml-datatypsmetoder .

Funktioner i en XML-instans som inte bevaras

SQL Server bevarar innehållet i XML-instansen, men bevarar inte aspekter av XML-instansen som inte anses vara betydande i XML-datamodellen. Det innebär att en hämtad XML-instans kanske inte är identisk med den instans som lagrades på servern, men innehåller samma information.

XML-deklaration

XML-deklarationen i en instans bevaras inte när instansen lagras i databasen. Till exempel:

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;

Resultatet är <doc/>.

XML-deklarationen, till exempel <?xml version='1.0'?>, bevaras inte när XML-data lagras i en xml-datatypsinstans . Det här är avsiktligt. XML-deklarationen () och dess attribut (version/kodning/fristående) går förlorade när data har konverterats till typen xml. XML-deklarationen behandlas som ett direktiv till XML-parsern. XML-data lagras internt som ucs-2. Alla andra PI:er i XML-instansen bevaras.

Attributordning

Ordningen på attribut i en XML-instans bevaras inte. När du kör frågor mot XML-instansen som lagras i kolumnen xml-typ kan ordningen på attributen i den resulterande XML-koden skilja sig från den ursprungliga XML-instansen.

Citattecken runt attributvärden

Enkla citattecken och dubbla citattecken runt attributvärden bevaras inte. Attributvärdena lagras i databasen som ett namn och värdepar. Citattecknen lagras inte. När en XQuery körs mot en XML-instans serialiseras den resulterande XML-koden med dubbla citattecken runt attributvärdena.

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

Båda frågorna returnerar = <root a="1" />.

Namnområdesprefix

Namnområdesprefix bevaras inte. När du anger XQuery mot en xml-typkolumn kan det serialiserade XML-resultatet returnera olika namnområdesprefix.

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

Namnområdesprefixet i resultatet kan vara annorlunda. Till exempel:

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

Se även