Klientsida XML-formatering (SQLXML 4.0)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Detta ämne ger information om klient-sida XML-formatering. Klientsideformatering avser formateringen av XML på den mellersta nivån.

Anmärkning

Detta ämne ger ytterligare information om hur man använder FOR XML-klausulen på klientsidan, och förutsätter att du redan är bekant med FOR XML-klausulen. För mer information om FOR XML, se Constructing XML Using FOR XML.

SQLNCLI11 var den första versionen av SQL Server-leverantören som fullt ut förstod de datatyper som introducerades i SQL Server 2005 (9.x). Beteendet för klientsidan FÖR XML med SQLOLEDB-leverantören kommer att behandla xml-datatyper som strängar.

Viktigt!

SQL Server Native Client (SNAC) levereras inte med:

  • SQL Server 2022 (16.x) och senare versioner
  • SQL Server Management Studio 19 och senare versioner

SQL Server Native Client (SQLNCLI eller SQLNCLI11) och den äldre Microsoft OLE DB-providern för SQL Server (SQLOLEDB) rekommenderas inte för ny programutveckling.

Använd någon av följande drivrutiner för nya projekt:

För SQLNCLI som levereras som en komponent i SQL Server-databasmotorn (versioner 2012 till och med 2019), se det här Support Lifecycle-undantag.

Formatering av XML-dokument på klientsidan

När en klientapplikation utför följande fråga:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... endast denna del av frågan skickas till servern:

SELECT FirstName, LastName  
FROM   Person.Contact  

Servern kör frågan och returnerar en raduppsättning (som innehåller FirstName och LastNamecolumns) till klienten. Mellannivån applicerar sedan FOR XML-transformationen på raduppsättningen och returnerar XML-formatering till klienten.

På samma sätt, när du kör en XPath-fråga, returnerar servern radmängden till klienten och FÖR XML EXPLICIT-transformationen appliceras på radmängden på klienten, vilket genererar önskad XML-formatering.

Följande tabell visar de modeller du kan specificera med klientsidan FÖR XML.

Klient-sida FOR XML-läge Comment
RAW Ger identiska resultat när det specificeras i klient- eller serversidan FÖR XML.
KAPSLADE Är liknande FOR XML AUTO-läge på serversidan.
uttrycklig Är liknande server-side FOR XML EXPLICIT läge.

Anmärkning

Om du anger AUTO-läge och begär klient-sida XML-formatering skickas hela frågan till servern; det vill säga, XML-formatering sker på servern. Detta görs för enkelhetens skull, men observera att NÄSTLADE läge returnerar bastabellnamn som elementnamn i det XML-dokument som genereras. Vissa av de applikationer du skriver kan kräva bastabellnamn. Till exempel kan du köra en lagrad procedur och ladda in den resulterande datan i en Dataset (i Microsoft .NET Framework), och sedan senare generera en DiffGram för att uppdatera data i tabellerna. I ett sådant fall behöver du bastabellsinformationen och du måste använda NESTED-läget.

Fördelar med klientbaserad XML-formatering

Följande är några fördelar med att formatera XML på klienten.

Om du har lagrade procedurer på servern som returnerar en enda raduppsättning kan du begära klientsidan FOR XML-transformation för att generera en XML.

Till exempel, betrakta följande lagrad procedur. Denna procedur returnerar för- och efternamn på anställda från Person.Kontakt-tabellen i AdventureWorks-databasen:

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  

Följande exempel på XML-mall kör den lagrade proceduren. FOR XML-klausulen specificeras efter namnet på den lagrade proceduren.

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

Eftersom attributet client-side-xml är satt till 1 (sann) i mallen, körs den lagrade proceduren på servern och den tvåkolumnsraduppsättning som servern returnerar transformeras till XML på mellannivån och returneras till klienten. (Endast ett delvis resultat visas här.)

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

Anmärkning

När du använder SQLXMLOLEDB Provider eller SQLXML Managed Classes kan du använda egenskapen ClientSideXml för att begära klient-side XML-formatering.

Arbetsbördan är mer balanserad.

Eftersom klienten gör XML-formateringen balanseras arbetsbelastningen mellan server och klient, vilket frigör servern att göra andra saker.

Stöd för klientbaserad XML-formatering

För att stödja klientsidans XML-formateringsfunktionalitet tillhandahåller SQLXML:

  • SQLXMLOLEDB-provider

  • SQLXML-hanterade klasser

  • Förbättrat stöd för XML-mallar

  • Egenskapen SqlXmlCommand.ClientSideXml

    Du kan specificera klientsidans formatering genom att sätta denna egenskap för SQLXML-hanterade klasser till true.

Förbättrat stöd för XML-mallar

Från och med SQL Server 2005 (9.x) har XML-mallen i SQL Server förbättrats med tillägget av klientsidans xml-attribut . Om detta attribut är satt till true formateras XML på klienten. Observera att detta mallattribut är identiskt i funktionalitet med SQLXMLOLEDB Provider-specifika egenskap ClientSideXML.

Anmärkning

Om du kör en XML-mall i en ADO-applikation som använder SQLXMLOLEDB Provider, och du specificerar både klientsidans XML-attribut i mallen och leverantörens ClientSideXML-egenskap, får värdet som anges i mallen företräde.

Se även

Arkitektur för klient- och server-sida XML-formatering (SQLXML 4.0)
FÖR XML (SQL Server)
FÖR XML-säkerhetsöverväganden (SQLXML 4.0)
xml-stöd för datatyper i SQLXML 4.0
SQLXML hanterade klasser
Klient- vs. server-sida XML-formatering (SQLXML 4.0)
SqlXmlCommand-objekt (SQLXML hanterade klasser)
XML-data (SQL Server)