Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Bu örnekte, EXPLICIT modunu kullanan bir deyimde SELECT yönergesi kullanılarak taşma sütunundaki verilerin nasıl ele alındığı gösterilmektedir.
Person Tabloyu göz önünde bulundurun. Bu tablo, XML belgesinin tüketilmemiş bölümünü depolayan bir Overflow sütunu vardır.
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 tablodaki Person sütunları alır. Sütun için OverflowAttributeName belirtilmemiştir, ancak evrensel bir tablo sütun adı sağlamak amacıyla yönergeXMLTEXT olarak ayarlanmıştır.
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;
Sonuçta elde edilen XML belgesinde:
AttributeName sütunu için belirtilmediğinden ve
Overflowyönergesi belirtildiğinden,xmltextöğesindeki öznitelikler kapsayan<overflow>öğenin öznitelik listesine eklenir.PersonIDöğesindeki<xmltext>öznitelik, aynı öğe düzeyinde alınanPersonIDözniteliğiyle çakıştığı için,<xmltext>null olsa bilePersonIDöğesindeki öznitelik yoksayılır. Genellikle, bir öznitelik, taşma durumunda aynı ada sahip bir başka özniteliği geçersiz kılar.
Sonuç şu şekildedir:
<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 verilerinin alt öğeleri varsa ve aynı sorgu belirtilmişse, Overflow sütunundaki alt öğeler, kapsayan <Parent> elemanının alt öğeleri olarak eklenir.
Örneğin, sütunda artık alt öğeler olacak şekilde tablodaki PersonOverflow verileri değiştirin.
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ürse, öğesindeki <xmltext> alt öğeler kapsayan <Parent> öğenin alt öğeleri olarak eklenir:
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;
Sonuç şu şekildedir:
<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>
AttributeName yönergesiyle xmltext belirtilirse, öğesinin <overflow> öznitelikleri, kapsayan <Parent> öğenin alt öğelerinin öznitelikleri olarak eklenir.
AttributeName için belirtilen ad, alt öğesinin adı olur
Bu sorguda, AttributeName, <overflow> yönergesiyle birlikte xmltext olarak belirtilmektedir.
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;
Sonuç şu şekildedir:
<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 öğesinde özniteliği için PersonName belirtilmiştir. Bu, PersonName öğesi kapsayıcı olarak <Parent> öğenin alt öğesi olarak eklenmesiyle sonuçlanır.
<xmltext> öğesinin öznitelikleri, kapsayan <Parent> öğesine hâlâ eklenmektedir.
<overflow> öğesinin içeriği olan alt öğeler, kapsayıcı <Parent> öğelerinin diğer alt öğelerinin başına eklenir.
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;
Sonuç şu şekildedir:
<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>
XMLTEXT Sütun verileri kök öğesinde öznitelikler içeriyorsa, bu öznitelikler XML veri şemasında gösterilmez ve MSXML ayrıştırıcısı sonuçta elde edilen XML belge parçasını doğrulamaz. Örneğin:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Sonuç budur. Döndürülen şemada overflow özniteliği a şemada 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 bakınız
- FOR XML ile AÇıK Modu Kullanma