Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure 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)