Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Toto téma poskytuje informace o formátování XML na straně klienta. Formátování na straně klienta se týká formátování XML na střední úrovni.
Poznámka:
Toto téma poskytuje další informace o použití XML klauzule FOR na straně klienta a předpokládá, že již znáte klauzuli FOR XML. Pro více informací o FOR XML viz Constructing XML Using FOR XML.
SQLNCLI11 byla první verzí poskytovatele SQL Serveru, která plně rozuměla datovým typům zavedeným v SQL Server 2005 (9.x). Chování na straně klienta FOR XML u poskytovatele SQLOLEDB bude xml datové typy považovat za řetězce.
Důležité
SQL Server Native Client (SNAC) není dodáván s:
- SQL Server 2022 (16.x) a novější verze
- SQL Server Management Studio 19 a novější verze
Pro vývoj nových aplikací se nedoporučuje nativní klient SQL Serveru (SQLNCLI nebo SQLNCLI11) a starší zprostředkovatel Microsoft OLE DB pro SQL Server (SQLOLEDB).
Pro nové projekty použijte jeden z následujících ovladačů:
Informace o SQLNCLI, které se dodává jako součást databázového stroje SQL Serveru (verze 2012 až 2019), naleznete v tomto support lifecycle exception.
Formátování XML dokumentů na straně klienta
Když klientská aplikace vykoná následující dotaz:
SELECT FirstName, LastName
FROM Person.Contact
FOR XML RAW
... Pouze tato část dotazu je odeslána serveru:
SELECT FirstName, LastName
FROM Person.Contact
Server vykoná dotaz a vrátí klientovi řádkovou sadu (obsahující sloupce FirstName a LastName). Střední úroveň pak aplikuje FOR XML transformaci na řádkovou sadu a vrací XML formátování klientovi.
Podobně při vykonání dotazu XPath server vrátí řádkovou sadu klientovi a transformace FOR XML EXPLICIT se aplikuje na řádkovou sadu klienta, čímž se vygeneruje požadované XML formátování.
Následující tabulka ukazuje režimy, které můžete specifikovat na straně klienta PRO XML.
| Klientský režim PRO XML | Comment |
|---|---|
| RAW | Produkuje identické výsledky, když je specifikován v klientské nebo serverové PRO XML. |
| VNOŘENÝ | Je podobný režimu PRO XML AUTO na straně serveru. |
| EXPLICITNÍ | Je podobný serverovému režimu pro XML explicitní režim. |
Poznámka:
Pokud zadáte režim AUTO a požádáte o formátování XML na straně klienta, celý dotaz je odeslán serveru; to znamená, že formátování XML probíhá přímo na serveru. To je provedeno pro pohodlí, ale je třeba poznamenat, že režim NESTED vrací názvy základních tabulek jako názvy prvků v dokumentu XML, který je generován. Některé aplikace, které píšete, mohou vyžadovat názvy základních tabulek. Například můžete spustit uloženou proceduru a načíst výsledná data do datasetu (v Microsoft .NET Frameworku) a později vygenerovat DiffGram pro aktualizaci dat v tabulkách. V takovém případě byste potřebovali informace z základní tabulky a museli byste použít režim VNOŘENÝ.
Výhody formátování XML na straně klienta
Následují některé výhody formátování XML na klientovi.
Pokud máte na serveru uložené procedury, které vracejí jednu sadu řádků, můžete požádat o transformaci FOR XML na straně klienta pro vytvoření XML.
Například zvažme následující uloženou proceduru. Tento postup vrací křestní a příjmení zaměstnanců z tabulky Osoba.Kontakt v databázi 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
Následující ukázková XML šablona vykonává uloženou proceduru. Klauzule FOR XML je specifikována za názvem uložené procedury.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
EXEC GetContacts FOR XML NESTED
</sql:query>
</ROOT>
Protože atribut klient-side-xml je v šabloně nastaven na 1 (true), uložená procedura se spustí na serveru a dvousloupcová řádková sada, kterou server vrátí, je na střední úrovni transformována do XML a vrácena klientovi. (Zde je zobrazen pouze částečný výsledek.)
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact FirstName="Gustavo" LastName="Achong" />
<Person.Contact FirstName="Catherine" LastName="Abel" />
</ROOT>
Poznámka:
Pokud používáte poskytovatele SQLXMLOLEDB nebo spravované třídy SQLXML, můžete použít vlastnost ClientSideXml k požadavku na formátování XML na straně klienta.
Pracovní zátěž je vyváženější.
Protože klient dělá formátování XML, pracovní zátěž je vyrovnána mezi serverem a klientem, což umožňuje serveru dělat jiné věci.
Podpora formátování XML na straně klienta
Pro podporu funkce formátování XML na straně klienta poskytuje SQLXML:
Zprostředkovatel SQLXMLOLEDB
Spravované třídy SQLXML
Podpora rozšířených XML šablon
SqlXmlCommand.ClientSideXml vlastnost
Formátování na straně klienta můžete nastavit nastavením této vlastnosti spravovaných tříd SQLXML na true.
Vylepšená podpora XML šablon
Od SQL Server 2005 (9.x) byla XML šablona v SQL Serveru vylepšena přidáním atributu client-side-xml . Pokud je tento atribut nastaven na true, XML se naformátuje na klientovi. Všimněte si, že tento atribut šablony je funkčně totožný s vlastností ClientSideXML specifickou pro poskytovatele SQLXMLOLEDB.
Poznámka:
Pokud spustíte XML šablonu v ADO aplikaci, která používá poskytovatele SQLXMLOLEDB, a zadáte jak atribut client-side-xml, tak vlastnost ClientSideXML poskytovatele, hodnota uvedená v šabloně má přednost.
Viz také
Architektura formátování XML na straně klienta a serveru (SQLXML 4.0)
FOR XML (SQL Server)
PRO XML bezpečnostní úvahy (SQLXML 4.0)
Podpora xml datových typů v SQLXML 4.0
Spravované třídy SQLXML
Formátování XML na straně klienta vs. serverové (SQLXML 4.0)
SqlXmlCommand Object (SQLXML spravované třídy)
Data XML (SQL Server)