Freigeben über


Clientseitige XML-Formatierung (SQLXML 4.0)

Dieses Thema enthält Informationen zur clientseitigen XML-Formatierung. Clientseitige Formatierung bezieht sich auf die Formatierung von XML auf der mittleren Ebene.

Hinweis

Dieses Thema enthält zusätzliche Informationen zur Verwendung der FOR XML-Klausel auf clientseitiger Seite und geht davon aus, 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.

Wichtig Um clientseitige FOR XML-Funktionen mit dem neuen xml Datentyp zu verwenden, sollten Clients immer den SQL Server Native Client (SQLNCLI11)-Datenanbieter anstelle des SQLOLEDB-Anbieters verwenden. SQLNCLI11 ist die neueste Version des SQL Server-Anbieters und versteht datentypen, die in SQL Server 2005 eingeführt wurden. Das Verhalten für clientseitiges FOR XML mit dem SQLOLEDB-Anbieter behandelt xml Datentypen als Zeichenfolgen.

Formatieren von XML-Dokumenten auf clientseitiger Seite

Wenn eine Clientanwendung die folgende Abfrage ausführt:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... nur dieser Teil der Abfrage wird 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.

Ebenso 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, wodurch die gewünschte XML-Formatierung generiert wird.

In der folgenden Tabelle sind die Modi aufgeführt, die Sie mit clientseitigem FOR XML angeben können.

Clientseitiger FÜR XML-Modus Kommentar
ROH Erzeugt identische Ergebnisse, wenn sie in clientseitigem oder serverseitigem FOR XML angegeben werden.
VERSCHACHTELT Ähnelt dem FOR XML AUTO-Modus auf serverseitiger Seite.
EXPLIZIT Ähnelt dem serverseitigen XML EXPLICIT-Modus.

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 erfolgt auf dem Server. Dies wird zur Vereinfachung durchgeführt, beachten Sie jedoch, dass der NESTED-Modus Basistabellennamen als Elementnamen im XML-Dokument zurückgibt, das generiert wird. Einige der Anwendungen, die Sie schreiben, 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 Sie müssten den GESCHACHTELTEN Modus verwenden.

Vorteile der clientseitigen XML-Formatierung

Im Folgenden sind einige Vorteile der Formatierung von XML auf dem Client aufgeführt.

Wenn Sie auf dem Server gespeicherte Prozeduren haben, die ein einzelnes Rowset zurückgeben, können Sie eine clientseitige FOR XML-Transformation anfordern, um einen XML-Code zu generieren.

Betrachten Sie beispielsweise die folgende gespeicherte Prozedur. Diese Prozedur gibt die Vor- und Nachnamen von Mitarbeitern aus der Tabelle "Person.Contact" 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 angegeben.

<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 ist ausgeglichener.

Da der Client die XML-Formatierung ausführt, wird die Arbeitsauslastung zwischen Server und Client ausgeglichen, wobei der Server andere Aufgaben ausführen kann.

Unterstützen der clientseitigen XML-Formatierung

Um die clientseitige XML-Formatierungsfunktionalität zu unterstützen, bietet SQLXML Folgendes:

  • SQLXMLOLEDB-Anbieter

  • Verwaltete SQLXML-Klassen

  • Erweiterte XML-Vorlagenunterstützung

  • SqlXmlCommand.ClientSideXml-Eigenschaft

    Sie können clientseitige Formatierungen angeben, indem Sie diese Eigenschaft der verwalteten SQLXML-Klassen auf "true" festlegen.

Erweiterte XML-Vorlagenunterstützung

Ab SQL Server 2005 wurde die XML-Vorlage in SQL Server um das Hinzufügen des clientseitigen XML-Attributs erweitert. Wenn dieses Attribut auf "true" festgelegt ist, wird XML 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.

Siehe auch

Architektur der clientseitigen und serverseitigen XML-Formatierung (SQLXML 4.0)
FOR XML (SQL Server)
Überlegungen zur XML-Sicherheit (SQLXML 4.0)
XML-Datentypunterstützung in SQLXML 4.0
Verwaltete SQLXML-Klassen
Clientseitige und serverseitige XML-Formatierung (SQLXML 4.0)
SqlXmlCommand-Objekt (SQLXML Managed Classes)
XML-Daten (SQL Server)