Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Dit onderwerp biedt informatie over client-side XML-opmaak. Client-side opmaak verwijst naar de opmaak van XML op de middenlaag.
Opmerking
Dit onderwerp biedt aanvullende informatie over het gebruik van de FOR XML-clausule aan de clientzijde, en gaat ervan uit dat je al bekend bent met de FOR XML-clausule. Voor meer informatie over FOR XML, zie Constructing XML Using FOR XML.
SQLNCLI11 was de eerste versie van de SQL Server-provider die volledig begrip had van de datatypes die in SQL Server 2005 (9.x) werden geïntroduceerd. Het gedrag voor clientzijde VOOR XML met de SQLOLEDB-provider behandelt xml-datatypes als strings.
Belangrijk
SQL Server Native Client (SNAC) wordt niet geleverd met:
- SQL Server 2022 (16.x) en latere versies
- SQL Server Management Studio 19 en latere versies
De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.
Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:
Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.
XML-documenten opmaken aan de clientzijde
Wanneer een clientapplicatie de volgende query uitvoert:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
... Alleen dit deel van de query wordt naar de server gestuurd:
SELECT FirstName, LastName
FROM Person.Contact
De server voert de query uit en geeft een rijset (die FirstName en LastNamecolumns bevat) terug naar de client. De middenlaag past vervolgens de FOR XML-transformatie toe op de rijset en geeft XML-opmaak terug aan de client.
Evenzo, wanneer je een XPath-query uitvoert, geeft de server de rijset terug aan de client en wordt de FOR XML EXPLICIT-transformatie toegepast op de rijset op de client, waardoor de gewenste XML-opmaak wordt gegenereerd.
De volgende tabel toont de modi die je kunt specificeren met client-side FOR XML.
| Client-side FOR XML-modus | Comment |
|---|---|
| RAW | Levert identieke resultaten op wanneer gespecificeerd in client- of server-side VOOR XML. |
| GENESTE | Is vergelijkbaar met DE VOOR XML AUTO-modus aan de serverzijde. |
| UITDRUKKELIJK | Is vergelijkbaar met server-side FOR XML EXPLICIT modus. |
Opmerking
Als je AUTO-modus specificeert en client-side XML-opmaak aanvraagt, wordt de volledige query naar de server gestuurd; dat wil zeggen, XML-opmaak vindt plaats op de server. Dit gebeurt voor het gemak, maar let op dat de NESTED-modus basistabelnamen teruggeeft als elementnamen in het gegenereerde XML-document. Sommige applicaties die je schrijft kunnen basistabelnamen vereisen. Je kunt bijvoorbeeld een opgeslagen procedure uitvoeren en de resulterende data laden in een Dataset (in het Microsoft .NET Framework), en later een DiffGram genereren om gegevens in de tabellen bij te werken. In zo'n geval heb je de basistabelinformatie nodig en moet je de NESTED-modus gebruiken.
Voordelen van client-side XML-opmaak
Hieronder volgen enkele voordelen van het opmaken van XML op de client.
Als je opgeslagen procedures op de server hebt die één enkele rijset teruggeven, kun je client-side een FOR XML-transformatie aanvragen om een XML te genereren.
Overweeg bijvoorbeeld de volgende opgeslagen procedure. Deze procedure geeft de voor- en achternamen van medewerkers terug uit de Person.Contacttabel in de AdventureWorks-database:
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
De volgende voorbeeld XML-sjabloon voert de opgeslagen procedure uit. De FOR XML-clausule wordt gespecificeerd na de naam van de opgeslagen procedure.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Omdat het client-side-xml-attribuut in het sjabloon op 1 (true) is gezet, wordt de opgeslagen procedure op de server uitgevoerd en wordt de tweekolomsrijset die door de server wordt teruggegeven naar XML op het middenniveau en teruggegeven aan de client. (Hier wordt slechts een gedeeltelijk resultaat getoond.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Opmerking
Wanneer je de SQLXMLOLEDB Provider of SQLXML Managed Classes gebruikt, kun je de ClientSideXml-eigenschap gebruiken om client-side XML-opmaak aan te vragen.
De werklast is beter verdeeld.
Omdat de client de XML-opmaak doet, wordt de werklast verdeeld tussen server en client, waardoor de server andere taken kan doen.
Ondersteuning van client-side XML-opmaak
Om de client-side XML-opmaakfunctionaliteit te ondersteunen, biedt SQLXML:
SQLXMLOLEDB-provider
Beheerde SQLXML-klassen
Verbeterde ondersteuning voor XML-templates
Eigenschap SqlXmlCommand.ClientSideXml
Je kunt client-side opmaak specificeren door deze eigenschap van de SQLXML beheerde klassen op true te zetten.
Verbeterde ondersteuning voor XML-templates
Vanaf SQL Server 2005 (9.x) is het XML-sjabloon in SQL Server verbeterd met de toevoeging van het client-side-xml-attribuut . Als dit attribuut op true is gezet, wordt XML op de client geformatteerd. Let op dat dit sjabloonattribuut qua functionaliteit identiek is aan de SQLXMLOLEDB Provider-specifieke ClientSideXML-eigenschap.
Opmerking
Als je een XML-sjabloon uitvoert in een ADO-applicatie die de SQLXMLOLEDB Provider gebruikt, en je specificeert zowel het client-side-xml-attribuut in de sjabloon als de provider ClientSideXML-eigenschap, krijgt de waarde die in het sjabloon is gespecificeerd voorrang.
Zie ook
Architectuur van client- en server-side XML-opmaak (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML-beveiligingsoverwegingen (SQLXML 4.0)
xml Data Type ondersteuning in SQLXML 4.0
SQLXML beheerde klassen
Client-side versus server-side XML-opmaak (SQLXML 4.0)
SqlXmlCommand Object (SQLXML beheerde klassen)
XML-gegevens (SQL Server)