Aracılığıyla paylaş


Örnek: xmltext yönerge belirtme

Veri taşma sütunda kullanarak nasıl ele alınan bu örnekte gösterilmektedir XMLTEXT yönergesi, bir SELECT deyim kullanarak açık modu.

Göz önünde Person tablo.Bu tablo olan bir Overflow sütun unconsumed parçası depolarxml belgesi.

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

Bu sorgu sütunlar'dan alır Person tablo.İçin Overflow sütun, AttributeName belirtilmemiş, ancak directive olarak küme XMLTEXT parçası sağlayan bir Evrensel tablo sütun adı.

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;

Sonuç xml belgesi:

  • Çünkü AttributeName için belirtilen Overflow sütun ve xmltext yönergesi belirtilen öznitelikleri <overflow> öğesi kapsayan öznitelik listesi için eklenmiş <Parent> öğesi.

  • 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.Genellikle, bir öznitelik taşma alanındaki aynı adlı bir öznitelik geçersiz kılar.

Bu sonucu verir:

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

Taşma veri alt öğeler varsa ve aynı sorgu belirtilirse, alt öğeler de Overflow sütun kapsayan, alt öğeler olarak eklenen <Parent> öğesi.

Örneğin, verileri değiştirmek Person Tablo olacak şekilde Overflow Şimdi sütun var. alt öğeler

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

Aynı sorgu yürütülür, alt öğeler de <xmltext> kapsayan, alt öğeler olarak öğesi eklenir <Parent> öğesi:

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;

Bu sonucu verir:

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

If AttributeName is specified with the xmltext directive, the attributes of the <overflow> element are added as attributes of the subelements of the enclosing <Parent> element.İçin belirtilen ad AttributeName alt öğesi adı olur.

Bu sorgu, AttributeName, <overflow>, birlikte belirtilen xmltext yönergesi*:*

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

Bu sonucu verir:

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

Bu sorgu öğesindeki directive için belirlenen PersonName öznitelik.Bu sonuçlar , PersonName kapsayan, bir alt öğesi olarak eklenmiyor <Parent> öğesi.Özniteliklerini <xmltext> yine de eklenmiş kapsayan için <Parent> öğesi.İçeriğini <overflow> [NULL]'öğesi alt öğeleri, e kapsayan, diğer alt öğeler için <Parent> öğeleri.

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;

Bu sonucu verir:

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

If the XMLTEXT column data contains attributes on the root element, these attributes are not shown in the XML data schema and the MSXML parser does not validate the resulting XML document fragment.Örneğin:

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

Sonuç budur.Döndürülen şema, taşma öznitelik dikkat edin a şemadan eksik:

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

Ayrıca bkz.

Başvuru