Share via


Clientseitige XML-Formatierung (SQLXML 4.0)

Dieses Thema enthält Informationen zur clientseitigen XML-Formatierung. Als clientseitige Formatierung wird die Formatierung von XML-Code auf der mittleren Ebene bezeichnet.

HinweisHinweis

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 zum Verwenden von FOR XML finden Sie unter Erstellen von XML mithilfe von FOR XML.

Wichtig   Zur Verwendung der clientseitigen FOR XML-Funktionalität mit dem neuen xml-Datentyp sollten Clients immer den SQL Server Native Client (SQLNCLI10)-Datenanbieter anstelle des SQLOLEDB-Anbieters verwenden. SQLNCLI10 ist die neueste Version des SQL Server-Anbieters und erkennt die in SQL Server 2005 eingeführten Datentypen vollständig. Das Verhalten für clientseitiges FOR XML mit dem SQLOLEDB-Anbieter behandelt xml-Datentypen als Zeichenfolgen.

Clientseitige Formatierung von XML-Dokumenten

Wenn eine Clientanwendung die folgende Abfrage ausführt:

SELECT FirstName, LastName
FROM   Person.Person
FOR XML RAW;

Wird nur dieser Teil der Abfrage an den Server gesendet:

SELECT FirstName, LastName
FROM   Person.Person

Der Server führt die Abfrage aus und gibt ein Rowset (das die Spalten FirstName und LastName 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

Anmerkung

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.

HinweisHinweis

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. Angenommen, Sie führen eine gespeicherte Prozedur aus, laden die Ergebnisdaten in ein Dataset (im Microsoft .NET Framework) und erstellen dann später ein DiffGram, um die 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.

Als Beispiel dient die folgende gespeicherte Prozedur. Diese Prozedur gibt den Vor- und Nachnamen aus der Person.Person-Tabelle in der AdventureWorks2008R2-Datenbank zurück:

IF EXISTS (SELECT name FROM sys.objects
   WHERE name = 'GetContacts' AND type = 'P')
   DROP PROCEDURE GetContacts;
GO
CREATE PROCEDURE GetContacts
AS
    SELECT   FirstName, LastName
    FROM     Person.Person;

Die gespeicherte Prozedur wird von der folgenden XML-Beispielvorlage ausgeführt. 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 client-side-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.Person FirstName="Gustavo" LastName="Achong" /> 
  <Person.Person FirstName="Catherine" LastName="Abel" />
</ROOT>
HinweisHinweis

Wenn Sie den SQLXMLOLEDB-Anbieter oder verwaltete SQLXML-Klassen verwenden, können Sie mithilfe der ClientSideXml-Eigenschaft clientseitige XML-Formatierung anfordern.

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

  • Verwaltete SQLXML-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.

Verbesserte Unterstützung für XML-Vorlagen

Ab SQL Server 2005 wurde die XML-Vorlage in SQL Server verbessert und durch 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 Vorlagenattribut die gleiche Funktionalität besitzt wie die anbieterspezifische ClientSideXML-Eigenschaft von SQLXMLOLEDB.

HinweisHinweis

Wenn Sie eine XML-Vorlage in einer ADO-Anwendung unter Verwendung des SQLXMLOLEDB-Anbieters ausführen und sowohl das client-side-xml-Attribut in der Vorlage als auch die anbieterspezifische ClientSideXML-Eigenschaft festlegen, hat der in der Vorlage angegebene Wert Vorrang.