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
Můžete vytvořit proměnné, parametry a sloupce xml typu. Volitelně můžete kolekci schémat XML přidružit k proměnné, parametru nebo sloupci xml typu. V tomto případě se xml instance datového typu nazývá jako typ. V opačném případě se instance XML nazývá netypovaná.
Správně formátovaný XML a datový typ XML
Datový typ xml xml implementuje standardní XML datový typ ISO. Proto může ukládat dobře formátované dokumenty XML verze 1.0 a také tzv. fragmenty obsahu XML s textovými uzly a libovolný počet elementů nejvyšší úrovně ve sloupci netypového XML. Systém zkontroluje, jestli jsou data ve správném formátu, nevyžaduje, aby byl sloupec vázán na schémata XML, a odmítne data, která nejsou dobře vytvořená v rozšířeném smyslu. To platí i pro netypové proměnné a parametry XML.
Schémata XML
Schéma XML poskytuje následující:
Omezení ověřování Pokaždé, když je přiřazena nebo změněna zadaná instance XML, SQL Server ověří instanci.
Informace o datovém typu Schémata poskytují informace o typech atributů a prvků v xml instance datového typu. Informace o typu poskytují přesnější operační sémantiku hodnot obsažených v instanci, než je to možné s nezatypovaným xml. Například desetinné aritmetické operace lze provádět s desetinnou hodnotou, ale ne s řetězcovou hodnotou. Z tohoto důvodu může být typové úložiště XML výrazně kompaktnější než netypové XML.
Volba typovaného nebo netypovaného XML
V následujících situacích použijte netypovaný xml datový typ:
Pro data XML nemáte schéma.
Máte schémata, ale nechcete, aby server data ověřil. To je někdy případ, kdy aplikace provádí ověření na straně klienta před uložením dat na serveru nebo dočasně ukládá data XML, která jsou neplatná podle schématu, nebo používá součásti schématu, které nejsou na serveru podporované.
Použijte datový typ xml v následujících situacích:
Máte schémata pro data XML a chcete, aby server ověřil data XML podle schémat XML.
Chcete využít optimalizaci úložiště a dotazů na základě informací o typu.
Při kompilaci dotazů chcete lépe využít informace o typu.
Zadané sloupce, parametry a proměnné XML můžou ukládat dokumenty XML nebo obsah. Při deklaraci však musíte zadat příznak, zda ukládáte dokument nebo obsah. Kromě toho musíte poskytnout kolekci schémat XML. Zadejte DOKUMENT, pokud každá instance XML má přesně jeden prvek nejvyšší úrovně. V opačném případě použijte OBSAH. Kompilátor dotazů používá příznak DOCUMENT v kontrolách typů během kompilace dotazu k odvození elementů nejvyšší úrovně singleton.
Vytváření typovaných XML
Než budete moct vytvořit typové xml proměnné, parametry nebo sloupce, musíte nejprve zaregistrovat kolekci schémat XML pomocí CREATE XML SCHEMA COLLECTION (Transact-SQL). Kolekci schématu XML pak můžete přidružit k proměnným, parametrům nebo sloupcům xml datového typu.
V následujících příkladech se pro zadání názvu kolekce schématu XML používá dvoudílná konvence pojmenování. První část je název schématu a druhá část je název kolekce schématu XML.
Příklad: Přidružení kolekce schématu k proměnné typu XML
Následující příklad vytvoří xml typ proměnné a přidruží k ní kolekci schémat. Kolekce schémat zadaná v příkladu je již importována v databázi AdventureWorks.
DECLARE @x xml (Production.ProductDescriptionSchemaCollection);
Příklad: Zadání schématu pro sloupec typu XML
Následující příklad vytvoří tabulku se sloupcem typu xml a určí schéma pro sloupec:
CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection));
Příklad: Předání parametru typu XML uložené proceduře
Následující příklad předá parametr typu xml uložené proceduře a určuje schéma proměnné:
CREATE PROCEDURE SampleProc
@ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
...
Poznamenejte si následující informace o kolekci schémat XML:
Kolekce schémat XML je k dispozici pouze v databázi, ve které byla zaregistrována pomocí Vytvoření kolekce schémat XML.
Pokud přetypujete řetězec na typ xml datový, parsování také provede ověření a datovou typizaci na základě oborů názvů schémat XML v zadané kolekci.
Můžete přetypovat xml datový typ na netypovaný xml datový typ a naopak.
Další informace o dalších způsobech generování XML v SQL Serveru naleznete v tématu Vytvoření instancí xml data. Po vygenerování xml je možné ho přiřadit buď k proměnné datového typu xml, nebo uložit ve sloupcích typu xml pro další zpracování.
V hierarchii datových typů se xml datový typ nachází pod sql_variant a uživatelem definovanými typy, ale nad libovolnými vestavěnými typy.
Příklad: Určení omezujících vlastností pro omezení zadaného sloupce XML
U zadaných xml sloupců můžete sloupec omezit tak, aby umožňoval pouze jeden element nejvyšší úrovně pro každou instanci uloženou v ní. Učiníte to zadáním volitelné fasety DOCUMENT při vytváření tabulky, jak je znázorněno v následujícím příkladu:
CREATE TABLE T(Col1 xml
(DOCUMENT Production.ProductDescriptionSchemaCollection));
GO
DROP TABLE T;
GO
Ve výchozím nastavení jsou instance uložené v zadaném sloupci xml uloženy jako obsah XML, nikoli jako dokumenty XML. To umožňuje následující:
Nula nebo mnoho prvků nejvyšší úrovně
Textové uzly v prvcích nejvyšší úrovně
Toto chování můžete také explicitně určit přidáním vlastnosti CONTENT, jak je znázorněno v následujícím příkladu:
CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));
GO -- Default
Volitelné aspekty DOCUMENT/CONTENT můžete zadat kdekoli, kde definujete typ xml (typ XML). Když například vytvoříte typovou xml proměnnou, můžete přidat omezující vlastnost DOCUMENT/CONTENT, jak je znázorněno v následujícím příkladu:
declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);
Definice typu dokumentu (DTD)
xml sloupce, proměnné a parametry datového typu lze zadat pomocí schématu XML, ale ne pomocí DTD. Vložený objekt DTD však lze použít pro netypovaný i zadaný kód XML k zadání výchozích hodnot a nahrazení odkazů na entity jejich rozbaleným formulářem.
Disky DTD můžete převést na dokumenty schématu XML pomocí nástrojů třetích stran a načíst schémata XML do databáze.
Aktualizace XML typu z SQL Serveru 2005
SQL Server 2008 (10.0.x) provedl několik rozšíření podpory schématu XML, včetně podpory laxního ověřování, vylepšeného zpracování xs:date, xs:time a xs:dateTime dat instance a přidání podpory pro typy seznamů a sjednocení. Ve většině případů změny neovlivní proces upgradu. Pokud jste však v SQL Serveru 2005 (9.x) použili kolekci schémat XML, která umožňuje hodnoty typu xs:date, xs:timenebo xs:dateTime (nebo jakýkoli podtyp), při připojení databáze SQL Serveru 2005 (9.x) k novější verzi SQL Serveru dojde k následujícím krokům upgradu:
Pro každý sloupec XML, který je zadán pomocí kolekce schémat XML, která obsahuje elementy nebo atributy, které jsou typu xs:anyType, xs:anySimpleType, xs:date nebo některý z jeho podtypů, xs:time nebo kterýkoli podtyp, nebo xs:dateTime nebo kterýkoli z jeho podtypů, nebo jsou typy sjednocení nebo typy seznamu, které obsahují některý z těchto typů, se následující stane:
Všechny indexy XML ve sloupci budou zakázány.
Všechny hodnoty SQL Serveru 2005 (9.x) budou i nadále reprezentovány v časovém pásmu Z, protože byly normalizovány do časového pásma Z.
Všechny hodnoty xs:date nebo xs:dateTime, které jsou menší než 1. ledna roku 1, způsobí chybu za běhu, když se index znovu sestaví, nebo příkazy XQuery nebo XML-DML se spustí proti xml datového typu obsahujícího tuto hodnotu.
Všechny záporné roky v xs:date nebo xs:dateTime facety nebo výchozí hodnoty v kolekci schématu XML se automaticky aktualizují na nejnižší hodnotu povolenou základním typem xs:date nebo xs:dateTime (například 0001-01-01T00:00:00.0000000Z pro xs:dateTime).
Příkaz Transact-SQL SELECT můžete stále použít k načtení celého xml datového typu, i když obsahuje záporné roky. Doporučujeme nahradit záporné roky rokem v nově podporovaném rozsahu nebo změnit typ prvku nebo atributu na xs:string.