Clientseitige XML-Formatierung (SQLXML 4.0)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance
Dieses Thema enthält Informationen zur clientseitigen XML-Formatierung. Als clientseitige Formatierung wird die Formatierung von XML-Code auf der mittleren Ebene bezeichnet.
Hinweis
Dieses Thema enthält zusätzliche Informationen zur clientseitigen Verwendung der FOR XML-Klausel und setzt voraus, dass Sie bereits mit der FOR XML-Klausel vertraut sind. Weitere Informationen zu FOR XML finden Sie unter Erstellen von XML mithilfe von FOR XML.
SQLNCLI11 war die erste Version des SQL Server-Anbieters, um die in SQL Server 2005 (9.x) eingeführten Datentypen vollständig zu verstehen. Das Verhalten für clientseitige FOR XML mit dem SQLOLEDB-Anbieter behandelt XML-Datentypen als Zeichenfolgen.
Wichtig
SQL Server Native Client (SNAC) wird nicht ausgeliefert mit:
- SQL Server 2022 (16.x) und höhere Versionen
- SQL Server Management Studio 19 und höhere Versionen
Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der ältere Microsoft OLE DB-Anbieter für SQL Server (SQLOLEDB) werden für die entwicklung neuer Anwendungen nicht empfohlen.
Für neue Projekte verwenden Sie einen der folgenden Treiber:
Informationen zu SQLNCLI, das als Komponente der SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Ausnahme für den Supportlebenszyklus.
Clientseitige Formatierung von XML-Dokumenten
Wenn eine Clientanwendung die folgende Abfrage ausführt:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
Wird nur dieser Teil der Abfrage an den Server gesendet:
SELECT FirstName, LastName
FROM Person.Contact
Der Server führt die Abfrage aus und gibt ein Rowset (das FirstName und LastNamecolumns enthält) an den Client zurück. Die mittlere Ebene wendet dann die FOR XML-Transformation auf das Rowset an und gibt die XML-Formatierung an den Client zurück.
Entsprechend gibt der Server beim Ausführen einer XPath-Abfrage das Rowset an den Client zurück und die FOR XML EXPLICIT-Transformation wird auf das Rowset auf dem Client angewendet. Somit wird die gewünschte XML-Formatierung erzeugt.
Die folgende Tabelle zeigt die Modi, die Sie mit clientseitigem FOR XML angeben können.
Clientseitiger FOR XML-Modus | Kommentar |
---|---|
RAW | Erzeugt bei Festlegung in clientseitigem oder serverseitigem FOR XML identische Ergebnisse. |
NESTED | Ist dem serverseitigen FOR XML AUTO-Modus ähnlich. |
EXPLICIT | Ist dem serverseitigen FOR XML EXPLICIT-Modus ähnlich. |
Hinweis
Wenn Sie den AUTO-Modus angeben und clientseitige XML-Formatierung anfordern, wird die gesamte Abfrage an den Server gesendet, d. h. die XML-Formatierung findet auf dem Server statt. Dies ist praktisch, aber beachten Sie, dass der NESTED-Modus Basistabellennamen als Elementnamen in dem generierten XML-Dokument zurückgibt. Einige der von Ihnen erstellten Anwendungen erfordern möglicherweise Basistabellennamen. Sie können beispielsweise eine gespeicherte Prozedur ausführen und die resultierenden Daten in einem Dataset (im Microsoft .NET Framework) laden und dann später ein DiffGram generieren, um Daten in den Tabellen zu aktualisieren. In einem solchen Fall benötigen Sie die Basistabelleninformationen und müssen den NESTED-Modus verwenden.
Vorteile der clientseitigen XML-Formatierung
Im Folgenden werden einige Vorteile der Formatierung von XML auf dem Client aufgezeigt.
Wenn auf dem Server gespeicherte Prozeduren gespeichert sind, die ein einzelnes Rowset zurückgeben, können Sie zur Erstellung des XML-Code die clientseitige FOR XML-Transformation anfordern.
Nehmen Sie die folgende gespeicherte Prozedur als Beispiel: Diese Prozedur gibt den Vor- und Nachnamen der Mitarbeiter aus der Person.Contact-Tabelle in der AdventureWorks-Datenbank zurück:
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
Die folgende XML-Beispielvorlage führt die gespeicherte Prozedur aus. Die FOR XML-Klausel wird nach dem Namen der gespeicherten Prozedur festgelegt.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Da das clientseitige XML-Attribut in der Vorlage auf 1 (true) festgelegt ist, wird die gespeicherte Prozedur auf dem Server ausgeführt, und das vom Server zurückgegebene zweispaltige Rowset wird in XML auf der mittleren Ebene transformiert und an den Client zurückgegeben. (Hier wird nur ein Teilergebnis angezeigt.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Hinweis
Wenn Sie den SQLXMLOLEDB-Anbieter oder die verwalteten SQLXML-Klassen verwenden, können Sie die ClientSideXml-Eigenschaft verwenden, um clientseitige XML-Formatierung anzufordern.
Die Arbeitsauslastung wird besser verteilt.
Da der Client die XML-Formatierung ausführt, wird die Arbeitsauslastung zwischen Server und Client besser verteilt. Der Server verfügt über mehr Kapazität für andere Aufgaben.
Unterstützung clientseitiger XML-Formatierung
Zur Unterstützung der clientseitigen XML-Formatierung bietet SQLXML:
SQLXMLOLEDB-Anbieter
SQLXML, verwaltete Klassen
Verbesserte Unterstützung für XML-Vorlagen
SqlXmlCommand.ClientSideXml-Eigenschaft
Sie können die clientseitige Formatierung festlegen, indem Sie diese Eigenschaft der verwalteten SQLXML-Klassen auf true festlegen.
Erweiterte XML-Vorlagenunterstützung
Ab SQL Server 2005 (9.x) wurde die XML-Vorlage in SQL Server durch das Hinzufügen des clientseitigen XML-Attributs verbessert. Wenn dieses Attribut auf true festgelegt wird, wird der XML-Code auf dem Client formatiert. Beachten Sie, dass dieses Vorlagenattribute in der Funktionalität mit der providerspezifischen ClientSideXML-Eigenschaft von SQLXMLOLEDB identisch ist.
Hinweis
Wenn Sie eine XML-Vorlage in einer ADO-Anwendung ausführen, die den SQLXMLOLEDB-Anbieter verwendet, und Sie sowohl das clientseitige XML-Attribut in der Vorlage als auch die ClientSideXML-Anbietereigenschaft angeben, hat der in der Vorlage angegebene Wert Vorrang.
Weitere Informationen
Architektur clientseitiger und serverseitiger XML-Formatierung (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML-Sicherheitsüberlegungen (SQLXML 4.0)
XML-Datentypunterstützung für SQLXML 4.0
Verwaltete SQLXML-Klassen
Clientseitige und serverseitige XML-Formatierung (SQLXML 4.0)
SqlXmlCommand-Objekt (Verwaltete SQLXML-Klassen)
XML-Daten (SQL Server)