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
Ha a xml adattípust explicit módon vagy implicit módon SQL-sztringre vagy bináris típusra öntötte, a xml adattípus tartalma a jelen cikkben ismertetett szabályok szerint lesz szerializálva.
Szerializálás kódolása
Ha az SQL-cél típusa VARBINARY, az eredmény UTF-16-kódolással lesz szerializálva, az elején egy UTF-16 bájtsorrend jellel, de XML-deklaráció nélkül. Ha a céltípus túl kicsi, hibaüzenet jelenik meg.
Például:
select CAST(CAST(N'<Δ/>' as XML) as VARBINARY(MAX))
Ez az eredmény:
0xFFFE3C0094032F003E00
Ha az SQL-cél típusa NVARCHAR vagy NCHAR, az eredmény az UTF-16 formátumban készül, elöl bájtsorrend jel nélkül és XML-deklaráció nélkül. Ha a céltípus túl kicsi, hibaüzenet jelenik meg.
Például:
select CAST(CAST(N'<Δ/>' as XML) as NVARCHAR(MAX))
Ez az eredmény:
<Δ/>
Ha az SQL-cél típusa VARCHAR vagy CHAR, az eredmény szerializálva lesz az adatbázis rendezési kódlapjának megfelelő kódolásban bájtsorrendjel vagy XML-deklaráció nélkül. Ha a céltípus túl kicsi, vagy az érték nem rendelhető le a célütközési kódlapra, hiba lép fel.
Például:
select CAST(CAST(N'<Δ/>' as XML) as VARCHAR(MAX))
Ez hibát okozhat, ha az aktuális rendezés kódlapja nem tudja megjeleníteni a Unicode Δ karaktert, vagy az adott kódolásban jeleníti meg.
Amikor XML-eredményeket ad vissza az ügyféloldalnak, az adatok UTF-16 kódolással lesznek elküldve. Az ügyféloldali szolgáltató ezután az API-szabályainak megfelelően teszi elérhetővé az adatokat.
Az XML-struktúrák szerializálása
Az xml adattípus tartalma a szokásos módon szerializálva van. Az elemcsomópontok az elemek jelölésére, a szövegcsomópontok pedig a szöveges tartalomra vannak leképezve. A karakterek entitásként való kezelésének és a típussal rendelkező atomértékek szerializálásának körülményeit azonban a következő szakaszok ismertetik.
XML-karakterek entitása a szerializálás során
Minden szerializált XML-struktúrának képesnek kell lennie az újraelemzésre. Ezért egyes karaktereket entitizált formában kell szerializálni, hogy megőrizzék az oda-vissza képességet az XML-elemző normalizálási fázisán keresztül. Egyes karaktereket azonban entitásoknak kell lenniük ahhoz, hogy a dokumentum jól formázható legyen, és így elemezhető legyen. A szerializálás során alkalmazott entitásokra vonatkozó szabályok a következők:
A &, <és > karakterek mindig
&,<és>entitizálva vannak, ha attribútumértékben vagy elemtartalomban fordulnak elő.Mivel az SQL Server idézőjelet (U+0022) használ az attribútumértékek bekerítésére, az attribútumértékek idézőjele entitássá alakul
"-ként.A helyettesítő pár csak a kiszolgálón történő átalakításkor jelenik meg egyetlen numerikus karakterhivatkozásként. A például megadott U+D800 U+DF00 karakterkód pár a
𐌀numerikus karakterhivatkozássá van alakítva.Ha meg szeretné védeni a TAB (U+0009) és a sorfeed (LF, U+000A) normalizálását az elemzés során, az attribútumértékeken belül entitások lesznek
	és
numerikus karakterhivatkozásaikhoz.Annak érdekében, hogy a kocsivisszavétel (CR, U+000D) ne normalizálódjon az elemzés során, az entitások a numerikus karakterhivatkozásra vannak állítva,

attribútumértékeken és elemtartalmakon belül.A kizárólag fehér teret tartalmazó szövegcsomópontok védelme érdekében az egyik, általában az utolsó, fehér tér karakter numerikus karakterhivatkozásként van megadva. Ily módon az újraelemzés megőrzi a szóközökkel kapcsolatos szövegcsomópontot, függetlenül attól, hogy az elemzés során hogyan van beállítva a fehér terület kezelése.
Például:
DECLARE @u NVARCHAR(50)
set @u = N'<a a="
'+NCHAR(0xD800)+NCHAR(0xDF00)+N'>"> '+NCHAR(0xA)+N'</a>'
SELECT CAST(CONVERT(XML,@u,1) as NVARCHAR(50));
Ez az eredmény:
<a a="
𐌀>">
</a>
Ha nem szeretné alkalmazni az utolsó térközvédelmi szabályt, használhatja az explicit CONVERT 1 opciót, amikor xml-t sztringgé vagy bináris típusra alakítja. Az entitások elkerülése érdekében például a következőket teheti:
SELECT CONVERT(NVARCHAR(50), CONVERT(XML, '<a> </a>', 1), 1);
Az query() metódus (xml adattípus) egy xml adattípus-példányt eredményez. Ezért a sztring vagy bináris típusra átalakított query() metódus bármely eredménye a korábban leírt szabályok szerint lesz entizálva. Ha nem entitásként megadott sztringértékeket szeretne lekérni, használja inkább az érték() metódust (xml-adattípus). Az alábbi példa a query() metódus használatára mutat be példát:
DECLARE @x xml
SET @x = N'<a>This example contains an entitized char: .</a>'
SELECT @x.query('/a/text()');
Ez az eredmény:
This example contains an entitized char: .
Az alábbi példa a value() metódus használatára mutat be példát:
SELECT @x.value('(/a/text())[1]', 'nvarchar(100)');
Ez az eredmény:
This example contains an entitized char: .
Beírt XML-adattípus szerializálása
A beírt xml- adattípus-példány olyan értékeket tartalmaz, amelyek az XML-sématípusaik szerint vannak begépelve. Ezek az értékek az XML-sématípusuk szerint szerializálva vannak az XQuery xs:string által előállított formátumával megegyező formátumban. További információkért lásd: Típusbeosztási szabályok az XQuery-ben.
Például az xs:double érték 1.34e1 szerializálva van 13,4-re az alábbi példában látható módon:
declare @x xml
set @x =''
select CAST(@x.query('1.34e1') as nvarchar(50));
Ez a 13.4 sztringértéket adja vissza.