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 příklad ilustruje, jak jsou data ve sloupci přetečení zpracována pomocí direktivy XMLTEXT ve SELECT příkazu, který používá režim EXPLICIT.
Vezměte v úvahu Person tabulku. Tato tabulka obsahuje Overflow sloupec, který ukládá nekonsumovanou část dokumentu XML.
USE tempdb;
GO
CREATE TABLE Person(PersonID varchar(5), PersonName varchar(20), Overflow nvarchar(200));
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P">content</SomeTag>');
Tento dotaz načte sloupce z Person tabulky. Pro Overflow sloupec není AttributeName zadán, ale pokyn je nastaven na XMLTEXT jako součást určení univerzálního názvu sloupce tabulky.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- No AttributeName; XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
Ve výsledném dokumentu XML:
Protože atribut AttributeName není zadán pro
Overflowsloupec a direktivaxmltextje zadána, atributy v elementu<overflow>jsou připojeny k seznamu atributů ohraničující<Parent>element.PersonIDProtože atribut v elementu<xmltext>koliduje sPersonIDatributem načteným na stejné úrovni elementu, atribut v elementu<xmltext>je ignorován, i kdyžPersonIDje NULL. Obecně platí, že atribut přepíše atribut se stejným názvem v případě překročení.
Toto je výsledek:
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">content</Parent>
Pokud data o přetečení mají podprvky a je zadán stejný dotaz, podprvky ve Overflow sloupci se přidají jako podprvky obklopujícího <Parent> prvku.
Změňte například data v Person tabulce tak, aby Overflow sloupec nyní obsahuje dílčí prvky.
USE tempdb;
GO
TRUNCATE TABLE Person;
GO
INSERT INTO Person VALUES
('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
,('P2','Joe',N'<SomeTag attr2="data"/>')
,('P3','Joe',N'<SomeTag attr3="data" PersonID="P"><name>PersonName</name></SomeTag>');
Pokud se spustí stejný dotaz, přidají se dílčí prvky v elementu <xmltext> jako dílčí prvky ohraničujícího <Parent> prvku:
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEXT] -- no AttributeName, XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
Toto je výsledek:
<Parent PersonID="P1" PersonName="Joe" attr1="data">content</Parent>
<Parent PersonID="P2" PersonName="Joe" attr2="data"></Parent>
<Parent PersonID="P3" PersonName="Joe" attr3="data">
<name>PersonName</name>
</Parent>
Pokud je AttributeName zadán pomocí xmltext direktivy, atributy elementu <overflow> jsou přidány jako atributy dílčích prvků zapouzdřujícího prvku <Parent>. Název zadaný pro AttributeName se změní na název dílčího prvku.
V tomto dotazu je atribut AttributeName<overflow> zadán společně se direktivouxmltext*:*
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!overflow!XMLTEXT] -- Overflow is AttributeName
-- XMLTEXT is a directive
FROM Person
FOR XML EXPLICIT;
Toto je výsledek:
<Parent PersonID="P1" PersonName="Joe">
<overflow attr1="data">content</overflow>
</Parent>
<Parent PersonID="P2" PersonName="Joe">
<overflow attr2="data" />
</Parent>
<Parent PersonID="P3" PersonName="Joe">
<overflow attr3="data" PersonID="P">
<name>PersonName</name>
</overflow>
</Parent>
V tomto elementu dotazu je pro atribut zadána PersonName. Výsledkem je, že PersonName je přidán jako dílčí prvek prvku <Parent>. Atributy objektu <xmltext> jsou stále připojeny k ohraničující <Parent> prvek. Obsah dílčích prvků elementu <overflow> je předřazen ostatním dílčím prvkům obsahu elementu <Parent>.
SELECT 1 AS Tag, NULL as parent,
PersonID AS [Parent!1!PersonID],
PersonName AS [Parent!1!PersonName!element], -- element directive
Overflow AS [Parent!1!!XMLTEXT]
FROM Person
FOR XML EXPLICIT;
Toto je výsledek:
<Parent PersonID="P1" attr1="data">content<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P2" attr2="data">
<PersonName>Joe</PersonName>
</Parent>
<Parent PersonID="P3" attr3="data">
<name>PersonName</name>
<PersonName>Joe</PersonName>
</Parent>
XMLTEXT Pokud data sloupce obsahují atributy v kořenovém elementu, tyto atributy nejsou zobrazeny ve schématu dat XML a analyzátor MSXML neověřuje výsledný fragment dokumentu XML. Například:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Toto je výsledek. Ve vráceném schématu chybí atribut a přetečení ve schématu:
<Schema name="Schema2"
xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="overflow" content="mixed" model="open">`
</ElementType>`
</Schema>`
<overflow xmlns="x-schema:#Schema2" a="1">
</overflow>