Udostępnij przez


Przykład: Określanie dyrektywy XMLTEXT

Ten przykład ilustruje, w jaki sposób dane kolumna przepełnienia jest skierowana przy użyciu XMLTEXT dyrektywa w trybie JAWNE instrukcja SELECT.

Należy wziąć pod uwagę Osoby tabela.Ta tabela zawiera Przepełnienie kolumna, która przechowuje ta część dokumentu XML.

CREATE TABLE Person(PersonID varchar(5), PersonName varchar(20), Overflow nvarchar(200))
INSERT INTO Person VALUES ('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
INSERT INTO Person VALUES ('P2','Joe',N'<SomeTag attr2="data"/>')
INSERT INTO Person VALUES ('P3','Joe',N'<SomeTag attr3="data" PersonID="P">content</SomeTag>')

Ta kwerenda pobiera kolumny z Osoby tabela.Dla Przepełnienie kolumna, Nazwa_atrybutu nie jest określony, ale dyrektywa is zestaw to XMLTEXT w związku z dostarczaniem nazwy kolumn tabela uniwersalne.

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ż Nazwa_atrybutu dla nie został określonyPrzepełnienie i kolumn XmlText w dyrektywie jest określony, atrybut w elemencie <overflow> są dołączane do listy atrybut otaczający elementu <Parent> .

  • Ponieważ PersonID atrybutu w elemencie <xmltext> jest w konflikcie z PersonID atrybut pobierana na tym samym poziomie elementu atrybutu w elemencie <xmltext> jest ignorowany, nawet jeśli PersonID jest NULL.Ogólnie rzecz biorąc atrybut zastępuje atrybutu o takiej samej nazwie w przeciążenia.

Oto wynik:

<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 dane przepełnienie zawiera podelementy i tej samej kwerendzie zostanie określona, podelementy w Przepełnienie kolumna są dodawane jako podelementy otaczający elementu <Parent> .

Na przykład zmienić dane w Osoby tabela tak, aby Przepełnienie kolumna ma teraz podelementy.

TRUNCATE TABLE Person
INSERT INTO Person VALUES ('P1','Joe',N'<SomeTag attr1="data">content</SomeTag>')
INSERT INTO Person VALUES ('P2','Joe',N'<SomeTag attr2="data"/>')
INSERT INTO Person VALUES ('P3','Joe',N'<SomeTag attr3="data" PersonID="P"><name>PersonName</name></SomeTag>')

Jeśli kwerenda jest wykonywana, podelementy w <xmltext> element są dodawane jako podelementy z otaczający <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

Oto wynik:

<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 Nazwa_atrybutu zostanie użytyXmlText atrybuty elementu <overflow> dyrektywy są dodawane jako atrybuty podelementy otaczający elementu <Parent> .Nazwa podana dla Nazwa_atrybutu stanie się nazwą podelement

W tej kwerendzie Nazwa_atrybutu, <overflow>, jest określona wraz z XmlText dyrektywa :

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

Oto wynik:

<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 dyrektywa określono PersonName atrybut. W efekcie PersonName Dodanie jako podelement otaczający elementu <Parent> . Atrybuty <xmltext> nadal są dołączane do otaczający <Parent> element. Zawartość <overflow> element podelementy, jest zabezpieczony na inne podelementy z otaczający <Parent> elementy.

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

Oto wynik:

<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 dla elementu głównego, te atrybuty nie są wyświetlane w schemacie danych XML i parsera MSXML nie sprawdza poprawności wynikowego fragmentu dokumentu XML.Na przykład:

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

Jest to wynik.Note that in the returned schema, the overflow atrybut a is missing from the 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> 

See Also

Reference