Sdílet prostřednictvím


Formátování XML na straně klienta (SQLXML 4.0)

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Toto téma poskytuje informace o formátování XML na straně klienta. Formátování na straně klienta se týká formátování XML na střední úrovni.

Poznámka:

Toto téma poskytuje další informace o použití XML klauzule FOR na straně klienta a předpokládá, že již znáte klauzuli FOR XML. Pro více informací o FOR XML viz Constructing XML Using FOR XML.

SQLNCLI11 byla první verzí poskytovatele SQL Serveru, která plně rozuměla datovým typům zavedeným v SQL Server 2005 (9.x). Chování na straně klienta FOR XML u poskytovatele SQLOLEDB bude xml datové typy považovat za řetězce.

Důležité

SQL Server Native Client (SNAC) není dodáván s:

  • SQL Server 2022 (16.x) a novější verze
  • SQL Server Management Studio 19 a novější verze

Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).

Pro nové projekty použijte jeden z následujících ovladačů:

Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.

Formátování XML dokumentů na straně klienta

Když klientská aplikace vykoná následující dotaz:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... Pouze tato část dotazu je odeslána serveru:

SELECT FirstName, LastName  
FROM   Person.Contact  

Server vykoná dotaz a vrátí klientovi řádkovou sadu (obsahující sloupce FirstName a LastName). Střední úroveň pak aplikuje FOR XML transformaci na řádkovou sadu a vrací XML formátování klientovi.

Podobně při vykonání dotazu XPath server vrátí řádkovou sadu klientovi a transformace FOR XML EXPLICIT se aplikuje na řádkovou sadu klienta, čímž se vygeneruje požadované XML formátování.

Následující tabulka ukazuje režimy, které můžete specifikovat na straně klienta PRO XML.

Klientský režim PRO XML Comment
RAW Produkuje identické výsledky, když je specifikován v klientské nebo serverové PRO XML.
VNOŘENÝ Je podobný režimu PRO XML AUTO na straně serveru.
EXPLICITNÍ Je podobný serverovému režimu pro XML explicitní režim.

Poznámka:

Pokud zadáte režim AUTO a požádáte o formátování XML na straně klienta, celý dotaz je odeslán serveru; to znamená, že formátování XML probíhá přímo na serveru. To je provedeno pro pohodlí, ale je třeba poznamenat, že režim NESTED vrací názvy základních tabulek jako názvy prvků v dokumentu XML, který je generován. Některé aplikace, které píšete, mohou vyžadovat názvy základních tabulek. Například můžete spustit uloženou proceduru a načíst výsledná data do datasetu (v Microsoft .NET Frameworku) a později vygenerovat DiffGram pro aktualizaci dat v tabulkách. V takovém případě byste potřebovali informace z základní tabulky a museli byste použít režim VNOŘENÝ.

Výhody formátování XML na straně klienta

Následují některé výhody formátování XML na klientovi.

Pokud máte na serveru uložené procedury, které vracejí jednu sadu řádků, můžete požádat o transformaci FOR XML na straně klienta pro vytvoření XML.

Například zvažme následující uloženou proceduru. Tento postup vrací křestní a příjmení zaměstnanců z tabulky Osoba.Kontakt v databázi AdventureWorks:

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  

Následující ukázková XML šablona vykonává uloženou proceduru. Klauzule FOR XML je specifikována za názvem uložené procedury.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Protože atribut klient-side-xml je v šabloně nastaven na 1 (true), uložená procedura se spustí na serveru a dvousloupcová řádková sada, kterou server vrátí, je na střední úrovni transformována do XML a vrácena klientovi. (Zde je zobrazen pouze částečný výsledek.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Poznámka:

Pokud používáte poskytovatele SQLXMLOLEDB nebo spravované třídy SQLXML, můžete použít vlastnost ClientSideXml k požadavku na formátování XML na straně klienta.

Pracovní zátěž je vyváženější.

Protože klient dělá formátování XML, pracovní zátěž je vyrovnána mezi serverem a klientem, což umožňuje serveru dělat jiné věci.

Podpora formátování XML na straně klienta

Pro podporu funkce formátování XML na straně klienta poskytuje SQLXML:

  • Zprostředkovatel SQLXMLOLEDB

  • Spravované třídy SQLXML

  • Podpora rozšířených XML šablon

  • SqlXmlCommand.ClientSideXml vlastnost

    Formátování na straně klienta můžete nastavit nastavením této vlastnosti spravovaných tříd SQLXML na true.

Vylepšená podpora XML šablon

Od SQL Server 2005 (9.x) byla XML šablona v SQL Serveru vylepšena přidáním atributu client-side-xml . Pokud je tento atribut nastaven na true, XML se naformátuje na klientovi. Všimněte si, že tento atribut šablony je funkčně totožný s vlastností ClientSideXML specifickou pro poskytovatele SQLXMLOLEDB.

Poznámka:

Pokud spustíte XML šablonu v ADO aplikaci, která používá poskytovatele SQLXMLOLEDB, a zadáte jak atribut client-side-xml, tak vlastnost ClientSideXML poskytovatele, hodnota uvedená v šabloně má přednost.

Viz také

Architektura formátování XML na straně klienta a serveru (SQLXML 4.0)
FOR XML (SQL Server)
PRO XML bezpečnostní úvahy (SQLXML 4.0)
Podpora xml datových typů v SQLXML 4.0
Spravované třídy SQLXML
Formátování XML na straně klienta vs. serverové (SQLXML 4.0)
SqlXmlCommand Object (SQLXML spravované třídy)
Data XML (SQL Server)