Beispiel: Angeben der XMLTEXT-Direktive
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Dieses Beispiel veranschaulicht, wie Daten in der Überlaufspalte mithilfe der XMLTEXT -Direktive in einer SELECT
-Anweisung im EXPLICIT-Modus verarbeitet werden.
Sie sehen hier die Person
-Tabelle. In dieser Tabelle speichert die Overflow
-Spalte den unverbrauchten Teil des XML-Dokuments.
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>');
Diese Abfrage ruft Spalten aus der Person
-Tabelle ab. Für die Overflow
Spalte wird "AttributeName" nicht angegeben, die Direktive wird jedoch als Teil der Bereitstellung eines universellen Tabellenspaltennamens festgelegtXMLTEXT
.
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;
Im resultierenden XML-Dokument:
Da "AttributeName " für die
Overflow
Spalte nicht angegeben ist und diexmltext
Direktive angegeben wird, werden die Attribute im<overflow>
Element an die Attributliste des eingeschlossenen<Parent>
Elements angefügt.Da das
PersonID
Attribut im<xmltext>
Element mit dem Attribut in Konflikt steht, dasPersonID
auf derselben Elementebene abgerufen wurde, wird das Attribut im<xmltext>
Element ignoriert, auch wennPersonID
NULL ist. Im Allgemeinen überschreibt ein Attribut ein Attribut mit demselben Namen in der Überlaufspalte.
Dies ist das Ergebnis:
<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>
Wenn die Überlaufdaten Unterelemente aufweisen und dieselbe Abfrage angegeben wird, werden die Unterelemente in der Overflow
Spalte als Unterelemente des eingeschlossenen <Parent>
Elements hinzugefügt.
So werden in diesem Beispiel die Daten in der Person
-Tabelle so geändert, dass die Overflow
-Spalte nun Unterelemente besitzt:
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>');
Wenn dieselbe Abfrage ausgeführt wird, werden die Unterelemente im <xmltext>
Element als Unterelemente des eingeschlossenen <Parent>
Elements hinzugefügt:
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;
Dies ist das Ergebnis:
<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>
Wenn AttributName mit der xmltext
Direktive angegeben wird, werden die Attribute des <overflow>
Elements als Attribute der Unterelemente des eingeschlossenen <Parent>
Elements hinzugefügt. Der für AttributeName angegebene Name wird zum Namen des Unterelements.
In dieser Abfrage wird "AttributeName" <overflow>
zusammen mit der xmltext
Direktive*:*
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;
Dies ist das Ergebnis:
<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>
In diesem Abfrageelement wird -Direktive angegeben für das PersonName
-Attribut angegeben. Dies führt dazu PersonName
, dass es als Unterelement des eingeschlossenen <Parent>
Elements hinzugefügt wird. Die Attribute des Elements <xmltext>
werden weiterhin an das eingeschlossene <Parent>
Element angefügt. Der Inhalt des <overflow>
Elements, Unterelemente, wird den anderen Unterelementen der eingeschlossenen <Parent>
Elemente vorangestellt.
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;
Dies ist das Ergebnis:
<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>
Wenn die XMLTEXT
Spaltendaten Attribute für das Stammelement enthalten, werden diese Attribute nicht im XML-Datenschema angezeigt, und der MSXML-Parser überprüft nicht das resultierende XML-Dokumentfragment. Beispiel:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Dies ist das Ergebnis. Im zurückgegebenen Schema fehlt das Overflow-Attribut a
im Schema:
<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>
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für