Udostępnij za pośrednictwem


Przykład: Określanie dyrektywy XMLTEXT

Ten przykład ilustruje, jak dane kolumna przepełnienie skierowana jest za pomocą XMLTEXT dyrektywa w SELECT instrukcja przy użyciu trybu JAWNE.

Należy rozważyć Person tabela.Ta tabela zawiera Overflow kolumna, która przechowuje niewykorzystana część 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>');

Ta kwerenda pobiera kolumny z Person tabela.Dla Overflow kolumna, AttributeName nie jest określony, ale directive jest zestaw do XMLTEXT w ramach udostępniania nazwę kolumna tabela uniwersalnych.

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;

W wynikowym dokumencie XML:

  • Ponieważ AttributeName nie został określony dla Overflow kolumna i xmltext określono dyrektywą atrybut w <overflow> elementu są dołączane do listy atrybut otaczający <Parent> elementu.

  • Because the PersonIDattribute in the <xmltext> element conflicts with the PersonID attribute retrieved on the same element level, the attribute in the <xmltext> element is ignored, even if PersonID is NULL.Ogólnie atrybut zastępuje atrybut o tej samej nazwie z obszaru przepełnienia.

Jest to wynikiem:

<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>

Jeśli przepełnienie danych zawiera podelementy i tej samej kwerendy podelementy w Overflow kolumna są dodawane jako podelementy otaczającej <Parent> elementu.

Na przykład zmiana danych w Person tabela tak, aby Overflow teraz kolumna zawiera podelementy.

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>');

Jeżeli kwerenda jest wykonywana, podelementy w <xmltext> elementu są dodawane jako podelementy otaczającej <Parent> element:

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;

Jest to wynikiem:

<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>

Jeśli AttributeName jest określany za pomocą xmltext dyrektywy, atrybuty <overflow> elementu są dodawane jako atrybuty podelementy otaczającej <Parent> elementu.Nazwa podana dla AttributeName staje się nazwa podelement

W tej kwerendzie AttributeName, <overflow>, określone razem z xmltext dyrektywy*:*

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

Jest to wynikiem:

<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>

W tym elemencie kwerendy directive określonych dla PersonName atrybut.To wyniki w PersonName dodawanego podelement otaczający <Parent> elementu.Atrybuty <xmltext> nadal są dołączane do otaczający <Parent> elementu.Zawartość <overflow> element podelementy, są poprzedzany na inne podelementy otaczającej <Parent> elementów.

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;

Jest to wynikiem:

<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>

Jeśli XMLTEXT kolumna danych zawiera atrybuty w elemencie głównym, te atrybuty nie są wyświetlane w danych schematu XML i parsera MSXML nie sprawdza poprawności wynikowy XML dokumentu fragmentu.Na przykład:

SELECT 1 AS Tag,
       0 ASParent,
       N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;

Jest to wynikiem.Należy zauważyć, że w schemacie zwrócone, atrybut przepełnienia a brakuje schematu:

<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>

Zobacz także

Odwołanie