Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Ez a példa bemutatja, hogyan történik a túlcsordulási oszlop adatainak kezelése az XMLTEXT-direktívaSELECT explicit módban történő használatával.
Tekintse meg a Person táblázatot. Ez a táblázat egy Overflow oszlopot tartalmaz, amely az XML-dokumentum fel nem használt részét tárolja.
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>');
Ez a lekérdezés lekéri az oszlopokat a Person táblából. Az oszlop esetében az OverflowAttribútumnév nincs megadva, de az irányelv beállítva van XMLTEXT mint univerzális táblaoszlop név megadása részeként.
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;
Az eredményként kapott XML-dokumentumban:
Mivel az Attribútumnév nincs megadva az
Overflowoszlophoz, és azxmltextirányelv meg van adva, az<overflow>elem attribútumai hozzá lesznek fűzve a belefoglaló<Parent>elem attribútumlistájához.Mivel az
PersonID<xmltext>elem attribútuma ütközik azPersonIDugyanazon elemszinten lekért attribútummal, a rendszer figyelmen kívül hagyja az<xmltext>elem attribútumát, még akkor is, haPersonIDNULL értékű. Az attribútumok általában felülbírálnak egy azonos nevű attribútumot a túlcsordulásban.
Ez az eredmény:
<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>
Ha a túlcsordulási adatok alelemeket tartalmaznak, és ugyanaz a lekérdezés van megadva, az Overflow oszlopban lévő alelemek a <Parent> elemet körülvevő elemek alelemeiként lesznek hozzáadva.
Módosítsa például a táblázat adatait Person úgy, hogy az Overflow oszlop alelemeket tartalmazzon.
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>');
Ha ugyanazt a lekérdezést hajtja végre, a <xmltext> elemen belüli alelemek hozzáadódnak a környező <Parent> elem alelemeiként.
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;
Ez az eredmény:
<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>
Ha az attribútumnév meg van adva az xmltext irányelvvel, az <overflow> elem attribútumai a belefoglaló elem alelemeinek attribútumaiként lesznek hozzáadva <Parent> . Az Attribútumnévhez megadott név lesz az al-elemek neve
Ebben a lekérdezésben az Attribútumnév, <overflow>az irányelvvel xmltext együtt van megadva*:*
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;
Ez az eredmény:
<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>
Ebben a lekérdezési elemben az irányelv van megadva a PersonName attribútum számára. Ennek eredményeként a PersonName elemet az azt körülvevő <Parent> elem alelemeként adják hozzá. Az attribútumok a <xmltext> továbbra is hozzá vannak fűzve a belefoglaló <Parent> elemhez. A <overflow> elem tartalma és alelemei előre hozzáadódnak a befoglaló <Parent> elemek többi aleleméhez.
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;
Ez az eredmény:
<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>
Ha az XMLTEXT oszlopadatok attribútumokat tartalmaznak a gyökérelemen, ezek az attribútumok nem jelennek meg az XML-adatsémában, és az MSXML-elemző nem ellenőrzi az eredményként kapott XML-dokumentumrészletet. Például:
SELECT 1 AS Tag,
0 AS Parent,
N'<overflow a="1"/>' AS 'overflow!1!!xmltext'
FOR XML EXPLICIT, xmldata;
Ez az eredmény. A visszaadott sémában a túlcsordulás attribútum a hiányzik a sémából:
<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>