Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure 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:
- sterownik Microsoft ODBC dla programu SQL Server
- sterownik Microsoft OLE DB dla programu SQL Server
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)