Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server
Azure SQL-Datenbank
Azure 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. AttributeName ist für die Overflow
-Spalte nicht angegeben, directive ist jedoch auf den Wert XMLTEXT
festgelegt, um einen Spaltennamen für die Universaltabelle bereitzustellen.
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 für die
Overflow
-Spalte kein AttributeName, sondern diexmltext
-Direktive angegeben ist, werden die Attribute des<overflow>
-Elements der Attributliste des einschließenden<Parent>
-Elements angehängt.Da das
PersonID
-Attribut des<xmltext>
-Elements in Konflikt zu dem auf der gleichen Elementebene abgerufenenPersonID
-Attribut steht, wird das Attribut des<xmltext>
-Elements ignoriert, sogar 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>
Wird dieselbe Abfrage angegeben, und die Überlaufdaten besitzen Unterelemente, werden die Unterelemente in der Overflow
-Spalte als Unterelemente des einschließenden <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>');
Beim Ausführen derselben Abfrage werden die Unterelemente des <xmltext>
-Elements als Unterelemente des einschließenden <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>
Wird AttributeName mit der xmltext
-Direktive angegeben, werden die Attribute des <overflow>
-Elements als Attribute der Unterelemente des einschließenden <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 angegeben*:*
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. Dadurch wird PersonName
als Unterelement des einschließenden <Parent>
-Elements hinzugefügt. Die Attribute von <xmltext>
werden weiterhin an das einschließende <Parent>
-Element angefügt. Der Inhalt des <overflow>
-Elements (Unterelemente usw.) wird den anderen Unterelementen der einschließenden <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 Daten der XMLTEXT
-Spalte Attribute für das Stammelement enthalten, werden diese Attribute nicht im XML-Datenschema angezeigt, und der MSXML-Parser führt keine Überprüfung des resultierenden XML-Dokumentfragments aus. Zum 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
:
<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>