Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
W tym przykładzie pokazano, jak dane w kolumnie nadmiaru są obsługiwane przy użyciu dyrektywy XMLTEXT w instrukcji, która wykorzystuje tryb JAWNY.
Rozważmy tabelę Person . Ta tabela zawiera kolumnę Overflow , która przechowuje nieskonsumowaną 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>');
To zapytanie pobiera kolumny z Person tabeli. Dla kolumny Overflow, atrybut AttributeName nie jest określony, ale dyrektywa jest ustawiona na XMLTEXT jako element zapewniający uniwersalną nazwę kolumny tabeli.
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;
W wynikowym dokumencie XML:
Ponieważ atrybut AttributeName nie jest określony dla
Overflowkolumny, axmltextdyrektywa jest określona, atrybuty w elemecie<overflow>są dołączane do listy atrybutów otaczającego<Parent>elementu.PersonIDPonieważ atrybut w elemecie<xmltext>powoduje konflikt z atrybutemPersonIDpobranym na tym samym poziomie elementu, atrybut w<xmltext>elemecie jest ignorowany, nawet jeśliPersonIDma wartość NULL. Ogólnie rzecz biorąc, atrybut zastępuje atrybut o tej samej nazwie w przypadku przepełnienia.
Jest to 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łnienia mają podelementy i określono to samo zapytanie, podelementy w Overflow kolumnie są dodawane jako podelementy otaczającego <Parent> elementu.
Na przykład zmień dane w Person tabeli, tak aby kolumna Overflow zawierała teraz 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śli to samo zapytanie jest wykonywane, podelementy w elemecie <xmltext> są dodawane jako podelementy otaczającego <Parent> elementu:
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 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 atrybut AttributeName jest określony z dyrektywą xmltext , atrybuty <overflow> elementu są dodawane jako atrybuty podelementów otaczającego <Parent> elementu. Nazwa określona dla AtrybutName staje się nazwą podelementu
W tym zapytaniu atrybutName, <overflow>, jest określony razem z dyrektywą xmltext *:*
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 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 elemecie zapytania określono dyrektywę dla PersonName atrybutu. Powoduje to dodanie PersonName jako podelementu otaczającego elementu <Parent>. Atrybuty elementu <xmltext> są nadal dołączane do otaczającego <Parent> elementu. Zawartość <overflow> elementu, podelementów, jest poprzedzana innymi podelementami otaczającego <Parent> elementu.
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 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>
XMLTEXT Jeśli dane kolumny zawierają atrybuty elementu głównego, te atrybuty nie są wyświetlane w schemacie danych XML, a analizator MSXML nie weryfikuje wynikowego fragmentu dokumentu XML. Przykład:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Jest to wynik. W zwróconym schemacie brakuje atrybutu przepełnienia a.
<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>