Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Tento článek popisuje možnosti dotazu, které je nutné zadat pro dotazování dat XML. Popisuje také části instancí XML, které se nezachovají, když jsou uložené v databázích.
Nastavení požadovaných možností dotazu
Když dotazujete sloupce nebo proměnné typu XML pomocí metod datového typu XML , musí být nastaveny následující možnosti, jak je znázorněno.
| Možnosti SET | Požadované hodnoty |
|---|---|
| ANSI_NULLS | ON |
| ANSI_PADDING | ON |
| ANSI_WARNINGS | ON |
| ARITHABORT | ON |
| Nastavení CONCAT_NULL_YIELDS_NULL | ON |
| NUMERIC_ROUNDABORT | Vypnuto |
| QUOTED_IDENTIFIER | ON |
Pokud se možnosti nenastaví, jak je znázorněno, dotazy a úpravy metod datového typu XML selžou.
Funkce instance XML, které se nezachovají
SQL Server zachovává obsah instance XML, ale nezachová aspekty instance XML, které nejsou v datovém modelu XML považovány za významné. To znamená, že načtená instance XML nemusí být stejná jako instance uložená na serveru, ale bude obsahovat stejné informace.
Deklarace XML
Deklarace XML v instanci není zachována, když je instance uložena v databázi. Například:
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;
Výsledek je <doc/>.
Deklarace XML, například <?xml version='1.0'?>, není zachována při ukládání dat XML v instanci datového typu XML . Toto chování je úmyslné. Deklarace XML () a její atributy (version/encoding/stand-alone) jsou ztraceny po převodu dat na typ XML. Deklarace XML je považována za direktivu analyzátoru XML. Data XML se ukládají interně jako ucs-2. Všechny ostatní PI v instanci XML jsou zachovány.
Pořadí atributů
Pořadí atributů v instanci XML není zachováno. Při dotazování instance XML uložené ve sloupci typu XML se pořadí atributů ve výsledném XML může lišit od původní instance XML.
Uvozovky kolem hodnot atributů
Jednoduché uvozovky a dvojité uvozovky kolem hodnot atributů se nezachovají. Hodnoty atributů jsou uloženy v databázi jako dvojice názvů a hodnot. Uvozovky se neukládají. Při spuštění XQuery v instanci XML, výsledný XML je serializován s dvojitými uvozovkami kolem hodnot atributů.
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
Výsledek obou dotazů je = <root a="1" />.
Předpony názvového prostoru
Předpony oboru názvů se nezachovají. Při zadání XQuery pro sloupec typu XML může serializovaný výsledek XML vrátit různé předpony oboru názvů.
DECLARE @x xml;
SET @x = '<ns1:root xmlns:ns1="abc" xmlns:ns2="abc">
<ns2:SomeElement/>
</ns1:root>';
SELECT @x;
SELECT @x.query('/*');
GO
Předpona oboru názvů ve výsledku se může lišit. Například:
<p1:root xmlns:p1="abc"><p1:SomeElement/></p1:root>