Udostępnij za pomocą


Formatowanie XML po stronie klienta (SQLXML 4.0)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Ten temat zawiera informacje na temat formatowania XML po stronie klienta. Formatowanie po stronie klienta odnosi się do formatowania XML na środkowym poziomie.

Uwaga / Notatka

Ten temat zawiera dodatkowe informacje na temat użycia klauzuli FOR XML po stronie klienta i zakłada, że znasz już klauzulę FOR XML. Więcej informacji o FOR XML można znaleźć w artykule Konstruowanie XML Using FOR XML.

SQLNCLI11 była pierwszą wersją dostawcy SQL Server, która w pełni zrozumiała typy danych wprowadzone w SQL Server 2005 (9.x). Zachowanie po stronie klienta FOR XML z dostawcą SQLOLEDB będzie traktowane jako typy danych xml jako ciągi znaków.

Ważne

Klient natywny SQL Servera (SNAC) nie jest dostarczany z:

  • SQL Server 2022 (16.x) i nowsze wersje
  • SQL Server Management Studio 19 i nowsze wersje

Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.

W przypadku nowych projektów użyj jednego z następujących sterowników:

W przypadku programu SQLNCLI dostarczanego jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), proszę sprawdzić wyjątek cyklu wsparcia .

Formatowanie dokumentów XML po stronie klienta

Gdy aplikacja kliencka wykonuje następujące zapytanie:

SELECT FirstName, LastName  
FROM   Person.Contact  
FOR XML RAW  

... Tylko ta część zapytania jest wysyłana do serwera:

SELECT FirstName, LastName  
FROM   Person.Contact  

Serwer wykonuje zapytanie i zwraca klientowi zestaw wierszy (zawierający kolumny FirstName i LastName). Środkowy poziom następnie stosuje transformację FOR XML do zbioru wierszy i zwraca formatowanie XML do klienta.

Podobnie, gdy wykonujesz zapytanie XPath, serwer zwraca zestaw wierszy klientowi, a transformacja FOR XML EXPLICIT jest stosowana do zestawu wierszy na kliencie, generując pożądane formatowanie XML.

Poniższa tabela pokazuje tryby, które można określić dla klienta DLA XML.

Tryb FOR XML-side po stronie klienta Comment
RAW Generuje identyczne wyniki, gdy jest określone po stronie klienta lub serwera DLA XML.
ZAGNIEŻDŻONE Jest podobny do trybu automatycznego dla FOR XML po stronie serwera.
WYRAŹNY Jest podobny do trybu serwerowego dla XML explicitnego.

Uwaga / Notatka

Jeśli wybierzesz tryb AUTO i poprosisz o formatowanie XML po stronie klienta, całe zapytanie zostanie wysłane do serwera; czyli formatowanie XML odbywa się na serwerze. Robi się to dla wygody, ale należy zauważyć, że tryb NESTED zwraca nazwy tabel bazowych jako nazwy elementów w generowanym dokumencie XML. Niektóre aplikacje, które piszesz, mogą wymagać nazw tabel bazowych. Na przykład możesz wykonać procedurę przechowywaną i załadować powstałe dane do zbioru danych (w Microsoft .NET Framework), a następnie wygenerować DiffGram do aktualizacji danych w tabelach. W takim przypadku potrzebowałbyś informacji z tabeli bazowej i musiałbyś użyć trybu NESTED.

Zalety formatowania XML po stronie klienta

Poniżej przedstawiono kilka zalet formatowania XML na kliencie.

Jeśli na serwerze masz przechowywane procedury zwracające pojedynczy zestaw wierszy, możesz poprosić o transformację FOR XML po stronie klienta, aby wygenerować XML.

Na przykład rozważmy następującą procedurę przechowywaną. Ta procedura zwraca imię i nazwiska pracowników z tabeli Person.Contact w bazie AdventureWorks:

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  

Poniższy przykładowy szablon XML wykonuje procedurę przechowywaną. Klauzula FOR XML jest określana po nazwie procedury przechowywanej.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <sql:query client-side-xml="1">  
    EXEC GetContacts FOR XML NESTED  
  </sql:query>  
</ROOT>  

Ponieważ atrybut xml po stronie klienta jest ustawiony na 1 (true) w szablonie, procedura przechowywana jest wykonywana na serwerze, a dwukolumnowy zestaw wierszy zwracany przez serwer jest przekształcany w XML na środkowym poziomie i zwracany klientowi. (Tutaj pokazano tylko częściowy wynik.)

 <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Person.Contact FirstName="Gustavo" LastName="Achong" />   
  <Person.Contact FirstName="Catherine" LastName="Abel" />  
</ROOT>  

Uwaga / Notatka

Gdy korzystasz z SQLXMLOLEDB Provider lub SQLXML Managed Classes, możesz użyć właściwości ClientSideXml , aby zażądać formatowania XML po stronie klienta.

Obciążenie pracą jest bardziej zrównoważone.

Ponieważ klient wykonuje formatowanie XML, obciążenie jest równoważone między serwerem a klientem, co pozwala serwerowi zajmować się innymi zadaniami.

Obsługa formatowania XML po stronie klienta

Aby wspierać funkcjonalność formatowania XML po stronie klienta, SQLXML oferuje:

  • Dostawca SQLXMLOLEDB

  • Klasy zarządzane SQLXML

  • Ulepszone wsparcie dla szablonów XML

  • Właściwość SqlXmlCommand.ClientSideXml

    Możesz określić formatowanie po stronie klienta, ustawiając tę właściwość zarządzanych klas SQLXML na true.

Ulepszone wsparcie dla szablonów XML

Począwszy od SQL Server 2005 (9.x), szablon XML w SQL Server został rozszerzony o atrybut client-side-xml . Jeśli ten atrybut jest ustawiony na true, XML jest formatowany na kliencie. Należy zauważyć, że atrybut tego szablonu jest identyczny funkcjonalnie z właściwością ClientSideXML specyficzną dla dostawcy SQLXMLOLEDB.

Uwaga / Notatka

Jeśli wykonasz szablon XML w aplikacji ADO korzystającej z dostawcy SQLXMLOLEDB i określisz zarówno atrybut client-side-xml w szablonie, jak i właściwość ClientSideXML dostawcy (provider), wartość podana w szablonie ma pierwszeństwo.

Zobacz też

Architektura formatowania XML po stronie klienta i serwera (SQLXML 4.0)
FOR XML (SQL Server)
FOR XML Security Considerations (SQLXML 4.0)
Obsługa typów danych xml w SQLXML 4.0
Klasy zarządzane SQLXML
Formatowanie XML po stronie klienta vs. po stronie serwera (SQLXML 4.0)
SqlXmlCommand Object (klasy zarządzane SQLXML)
Danych XML (SQL Server)