Share via


Clientseitige XML-Formatierung (SQLXML 4.0)

Gilt für:SQL ServerAzure SQL-DatenbankAzure 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, die die in SQL Server 2005 (9.x) eingeführten Datentypen vollständig verstanden hat. Das Verhalten für clientseitige FOR XML mit dem SQLOLEDB-Anbieter behandelt xml-Datentypen als Zeichenfolgen.

Wichtig

Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, die als Komponente der SQL Server-Datenbank-Engine (Versionen 2012 bis 2019) enthalten ist, finden Sie in dieser Supportlebenszyklus-Ausnahme.

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 ein Dataset laden (im Microsoft-.NET Framework), und 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 auf der mittleren Ebene in XML 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 verwaltete 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 UNTERSTÜTZUNG von XML-Vorlagen

Ab SQL Server 2005 (9.x) wurde die XML-Vorlage in SQL Server um das Client-side-xml-Attribut erweitert. Wenn dieses Attribut auf true festgelegt wird, wird der XML-Code auf dem Client formatiert. Beachten Sie, dass dieses Vorlagenattribute in seiner Funktionalität mit der anbieterspezifischen 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-Eigenschaft des Anbieters 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 im Vergleich zur serverseitigen XML-Formatierung (SQLXML 4.0)
SqlXmlCommand-Objekt (Verwaltete SQLXML-Klassen)
XML-Daten (SQL Server)