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.
In diesem Beispiel wird veranschaulicht, wie Daten in der Überlaufspalte mithilfe der XMLTEXT Direktive in einer SELECT Anweisung mithilfe des EXPLICIT-Modus adressiert werden.
Betrachten Sie die Person Tabelle. Diese Tabelle enthält eine Overflow Spalte, in dem der unverbrauchte Teil des XML-Dokuments gespeichert wird.
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, aber die Direktive wird auf XMLTEXT gesetzt, um einen universellen Tabellenspaltennamen bereitzustellen.
SELECT 1 as Tag, NULL as parent,
PersonID as [Parent!1!PersonID],
PersonName as [Parent!1!PersonName],
Overflow as [Parent!1!!XMLTEST] -- No AttributeName; XMLTEXT directive
FROM Person
FOR XML EXPLICIT;
Im resultierenden XML-Dokument:
Da "AttributeName" für die
OverflowSpalte nicht angegeben ist und diexmltextDirektive angegeben wird, werden die Attribute im <overflow> Element an die Attributliste des eingeschlossenen <Parent> Elements angefügt.Da das
PersonIDAttribut im <xmltext> Element mit dem Attribut in Konflikt steht, dasPersonIDauf derselben Elementebene abgerufen wurde, wird das Attribut imxmltext<> Element ignoriert, auch wennPersonIDNULL ist. Im Allgemeinen überschreibt ein Attribut ein Attribut mit demselben Namen im Überlauf.
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.
Ändern Sie beispielsweise die Daten in der Person Tabelle so, dass die Overflow Spalte jetzt Unterelemente enthält.
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 AttributName 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 die Direktive für das PersonName Attribut angegeben. Infolgedessen wird PersonName als Unterelement des umschließenden <Parent>-Elements hinzugefügt. 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 ASParent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Dies ist das Ergebnis. Beachten Sie, dass im zurückgegebenen Schema das Overflow-Attribut a im Schema fehlt:
<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>