Megosztás a következőn keresztül:


Kliensoldali XML formating (SQLXML 4.0)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure 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)