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
Azure SQL Managed Instance
Ez a téma információkat nyújt a kliensoldali XML formázásról. Az ügyféloldali formázás az XML középső szintre történő formázását jelenti.
Megjegyzés:
Ez a téma további információkat nyújt a kliens oldali FOR XML záradék használatáról, és feltételezi, hogy már ismered a FOR XML záradékot. További információért az FOR XML-ről lásd: Constructing XML Using FOR XML.
SQLNCLI11 volt az első SQL Server szolgáltató verziója, amely teljes mértékben értette az SQL Server 2005 (9.x) által bevezetett adattípusokat. Az ügyféloldali XML viselkedése az SQLOLEDB szolgáltatóval az xml adattípusokat stringként kezeli.
Fontos
SQL Server Native Client (SNAC) nem kerül szállításra a következőkkel:
- SQL Server 2022 (16.x) és újabb verziók
- AZ SQL Server Management Studio 19- és újabb verziói
Az SQL Server natív ügyfele (SQLNCLI vagy SQLNCLI11) és az örökölt Microsoft OLE DB Provider for SQL Server (SQLOLEDB) nem ajánlott az új alkalmazásfejlesztéshez.
Új projektek esetén használja az alábbi illesztőprogramok egyikét:
Az SQL Server adatbázismotor (2012–2019) egyik összetevőjeként szállított SQLNCLI esetében tekintse meg az alábbi támogatási életciklus-kivételt.
XML dokumentumok formázása kliens oldalon
Amikor egy kliensalkalmazás a következő lekérdezést hajtja végre:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
... Csak a lekérdezés ezen része kerül a szerverre:
SELECT FirstName, LastName
FROM Person.Contact
A szerver végrehajtja a lekérdezést, és visszaküld egy sorhalmazt (amely tartalmazza a Keresztnév és a Vezetéknévoszlopokat) a kliensnek. A középső szint ezután az FOR XML transzformációt alkalmazza a sorhalmazra, és visszaadja az XML formázást a kliensnek.
Hasonlóképpen, amikor egy XPath lekérdezést futtatunk, a szerver visszaadja a sorkészletet a kliensnek, és a FOR XML EXPLICIT transzformációt alkalmazzák a kliensen lévő sorhalmazra, létrehozva a kívánt XML formázást.
Az alábbi táblázat mutatja azokat a módokat, amelyeket kliensoldali FOR XML segítségével meg lehet határozni.
| Kliensoldali FOR XML mód | Comment |
|---|---|
| RAW | Azonos eredményt ad, ha kliensoldali vagy szerveroldali FOR XML-ben van megadva. |
| BEÁGYAZOTT | Hasonló a szerveroldali XML AUTO módhoz. |
| EGYÉRTELMŰ | Hasonló a szerveroldali XML explicit módhoz. |
Megjegyzés:
Ha megadod az AUTO módot és kérsz kliens oldali XML formázást, az egész lekérdezés elküldi a szervernek; vagyis XML formázás történik a szerveren. Ez a kényelem érdekében történik, de fontos megjegyezni, hogy a NESTED mód az alaptábla neveket elemnevekként adja vissza az XML dokumentumban, amelyet generálnak. Néhány alkalmazáshoz alaptábla neveket igényelhet. Például futtathatsz egy tárolt eljárást, és betöltheted az eredményt egy adathalmazba (a Microsoft .NET keretrendszerében), majd később létrehozhatsz egy DiffGramot az adatok frissítéséhez a táblákban. Ilyen esetben szükség lenne az alaptábla információkra, és a NESTED módot kellene használni.
Az ügyféloldali XML formázás előnyei
Az alábbiakban néhány előnye az XML kliensen történő formázásának.
Ha a szerveren tárolt eljárások vannak, amelyek egyetlen sorhalmazt adnak vissza, kérhetsz kliens oldali XML transzformációt XML generálásához.
Például vegyük a következő tárolt eljárást. Ez az eljárás visszaadja az alkalmazottak kereszt- és vezetéknevét az AdventureWorks adatbázis Person.Contact táblájából:
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'GetContacts' AND type = 'P')
DROP PROCEDURE GetContacts
GO
CREATE PROCEDURE GetContacts
AS
SELECT FirstName, LastName
FROM Person.Contact
A következő minta-XML sablon hajtja végre a tárolt eljárást. A FOR XML záradék a tárolt eljárás neve után van megadva.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Mivel a kliensoldali-xml attribútum a sablonban 1-re van állítva, a tárolt eljárást a szerveren futtatják, és a szerver által visszaadott kétoszlopos sorhalmaz XML-re alakul át a középső szinten, majd visszaküldi az ügyfélnek. (Itt csak egy részleges eredmény látható.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Megjegyzés:
Amikor az SQLXMLOLEDB Provider vagy SQLXML Managed Classes rendszert használod, a ClientSideXml tulajdonsággal kérheted az ügyféloldali XML formázást.
A munkaterhelés kiegyensúlyozottabb.
Mivel az ügyfél végzi az XML formázást, a munkaterhelés kiegyensúlyozódik a szerver és az ügyfél között, így a szerver más feladatokat is elvégezhet.
Kliensoldali XML formázás támogatása
Az ügyféloldali XML formázási funkció támogatásához az SQLXML a következőket kínálja:
SQLXMLOLEDB-szolgáltató
FELÜGYELT SQLXML-osztályok
Fejlesztett XML sablon támogatás
SqlXmlCommand.ClientSideXml property
Az ügyféloldali formázást úgy határozhatod meg, hogy az SQLXML menedzselt osztályok ezen tulajdonságát true-nak állítod.
Fejlesztett XML sablon támogatás
Az SQL Server 2005 (9.x) verziótól kezdve az SQL Server XML sablonját a kliens oldali-xml attribútummal fejlesztették. Ha ez az attribútumot true-ra állítják, akkor az XML-t a kliensben formázzák. Fontos megjegyezni, hogy ez a sablon attribútum funkcionalitásban megegyezik az SQLXMLOLEDB szolgáltató-specifikus ClientSideXML tulajdonságával.
Megjegyzés:
Ha egy XML sablont futtatsz egy ADO alkalmazásban, amely az SQLXMLOLEDB Providert használja, és megadod mind a kliens oldali-xml attribútumot a sablonban, mind a szolgáltató ClientSideXML tulajdonságát, akkor a sablonban megadott érték kerül előtérbe.
Lásd még:
Az ügyfél- és szerveroldali XML formázás architektúrája (SQLXML 4.0)
XML(SQL Server) ESETÉN
FOR XML biztonsági szempontok (SQLXML 4.0)
xml adattípus támogatás az SQLXML 4.0-ban
SQLXML Managed Classes
Kliens oldali vs. szerveroldali XML formázás (SQLXML 4.0)
SqlXmlCommand Object (SQLXML Managed Classes)
XML-adatok (SQL Server)