Vs po stronie klienta. Formatowanie (SQLXML 4.0) XML po stronie serwera
W tym temacie opisano ogólne różnice między po stronie klient i serwera SQLXML formatowanie XML.
Wiele wierszy kwerendy nie są obsługiwane w formatowanie po stronie klienta
Kwerendy, które generują wiele zestawów wierszy nie są obsługiwane, gdy używane jest formatowanie XML po stronie klient.Załóżmy, że masz katalogu wirtualnego, w której masz klient formatowanie określone.Należy wziąć pod uwagę ten szablon próbka ma dwóch instrukcji SELECT w <sql:query> blok:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT FirstName FROM Person.Person FOR XML Nested;
SELECT LastName FROM Person.Person FOR XML Nested
</sql:query>
</ROOT>
Możesz wykonać tego szablonu w kodzie aplikacji i błąd jest zwracany, ponieważ formatowanie XML po stronie klient nie obsługuje wielu zestawów wierszy.Jeśli określisz kwerend w dwóch oddzielnych <sql:query> bloków, otrzymasz żądane wyniki.
Sygnatura czasowa map w różny sposób w vs klienta.Po stronie serwera formatowania
Formatowanie kolumna bazy danych XML po stronie serwera timestamp Wpisz map typu XDR i8 (gdy w kwerendzie określono opcję XMLDATA).
Formatowanie kolumna bazy danych XML po stronie klient timestamp mapy albo wpisz uri lub bin.base64 typu XDR (w zależności od tego, czy w kwerendzie określono opcję base64 binarny).The bin.base64 XDR type is useful if you use the updategram and bulkload features, because this type is converted to the SQL Server timestamp type.W ten sposób, insert, update lub operacji usuwania powiedzie się.
Głębokie warianty są używane po stronie serwera formatowania
W formacie XML po stronie serwera są używane głębokie typy typu VARIANT.Jeśli używasz XML po stronie klient formatowania, warianty są konwertowane na ciąg Unicode i podtypów WARIANTU nie są używane.
ZAGNIEŻDŻONE vs trybu.Tryb automatyczny
Tryb ZAGNIEŻDŻONYCH XML dla klient jest podobny do trybu automatycznego XML dla po stronie serwera, z następującymi wyjątkami:
Kwerendę widoki po stronie serwera za pomocą trybu automatycznego Nazwa widoku są zwracane jako nazwy elementu w wynikowym pliku XML.
Na przykład załóżmy, że następujący widok jest tworzony w tabela Person.Person w AdventureWorks2008R2 bazy danych:
CREATE VIEW ContactView AS (SELECT BusinessEntityID as CID,
FirstName as FName,
LastName as LName
FROM Person.Person);
Następującego szablonu określa zapytanie widoku ContactView, a także określa formatowania XML po stronie serwera:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="0">
SELECT *
FROM ContactView
FOR XML AUTO
</sql:query>
</ROOT>
Wykonać szablon, zwracany jest następujący kod XML.(Tylko częściowe wyniki są wyświetlane.) Należy zauważyć, że nazwy elementu nazw widoków, wobec których kwerenda jest wykonywana.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ContactView CID="1" FName="Gustavo" LName="Achong" />
<ContactView CID="2" FName="Catherine" LName="Abel" />
...
</ROOT>
Po określeniu formatowania przy użyciu odpowiedniego trybu ZAGNIEŻDŻONYCH XML po stronie klient nazwy tabela bazowa są zwracane jako nazwy elementu w wynikowym pliku XML.Na przykład, następujący szablon wykonuje te same instrukcja SELECT, ale formatowanie XML jest wykonywane po stronie klient (czyli xml po stronie klient jest zestaw na wartość true w szablonie):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
SELECT *
FROM ContactView
FOR XML NESTED
</sql:query>
</ROOT>
Wykonywanie tego szablonu daje następujące XML.Uwaga nazwy elementu w tym przypadek jest nazwa tabela bazowa.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Person CID="1" FName="Gustavo" LName="Achong" />
<Person.Person CID="2" FName="Catherine" LName="Abel" />
...
</ROOT>
W trybie AUTO XML dla po stronie serwera tabela aliasy określonych w kwerendzie są zwracane jako nazwy elementu w wynikowym pliku XML.
Rozważmy na przykład tego szablonu:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="0">
SELECT FirstName as fname,
LastName as lname
FROM Person.Person AS C
FOR XML AUTO
</sql:query>
</ROOT>
Wykonywanie szablonu daje następujące XML:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<C fname="Gustavo" lname="Achong" />
<C fname="Catherine" lname="Abel" />
...
</ROOT>
XML dla klient w trybie ZAGNIEŻDŻONYCH tabela nazwy są zwracane jako nazwy elementu w wynikowym pliku XML.(Tabela aliasów, które są określone w kwerendzie nie są używane.) Rozważmy na przykład tego szablonu:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
SELECT FirstName as fname,
LastName as lname
FROM Person.Person C
FOR XML NESTED
</sql:query>
</ROOT>
Wykonywanie szablonu daje następujące XML:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Person fname="Gustavo" lname="Achong" />
<Person.Person fname="Catherine" lname="Abel" />
...
</ROOT>
Jeśli użytkownik ma kwerendę, która zwraca kolumny jako kwerendy dbobject, nie można używać aliasów dla tych kolumn.
Na przykład rozważmy następujący szablon, który wykonuje kwerendę, która zwraca identyfikator pracownika i fotografii.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query client-side-xml="1">
SELECT ProductPhotoID, LargePhoto as P
FROM Production.ProductPhoto
WHERE ProductPhotoID=5
FOR XML NESTED, elements
</sql:query>
</ROOT>
Wykonywanie tego szablonu zwraca kolumna fotografii jako kwerendy dbobject.W tej kwerendzie dbobject @P odnosi się do nazwa kolumna, która nie istnieje.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Production.ProductPhoto>
<ProductPhotoID>5</ProductPhotoID>
<LargePhoto>dbobject/Production.ProductPhoto[@ProductPhotoID='5']/@P</LargePhoto>
</Production.ProductPhoto>
</ROOT>
Jeżeli formatowanie XML jest wykonywane na serwerze (xml po stronie klient = "0"), można użyć alias dla kolumnas, który zwraca kwerendy dbobject, w którym rzeczywista tabela i kolumna nazwy są zwracane (nawet jeśli aliasy określone).Na przykład, następujący szablon wykonuje kwerendę i formatowanie XML jest wykonywane na serwerze ( xml po stronie klient nie określono opcji i Uruchamiane klient nie wybrano opcji dla wirtualnego katalogu głównego).Kwerendy określa również automatycznego trybu (nie po stronie klient ZAGNIEŻDŻONYCH).
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query
SELECT ProductPhotoID, LargePhoto as P
FROM Production.ProductPhoto
WHERE ProductPhotoID=5
FOR XML AUTO, elements
</sql:query>
</ROOT>
Po wykonaniu tego szablonu, zwracany jest następujący dokument XML (należy zauważyć, że aliasów nie są używane w kwerendzie dbobject dla kolumna LargePhoto):
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Production.ProductPhoto>
<ProductPhotoID>5</ProductPhotoID>
<LargePhoto>dbobject/Production.ProductPhoto[@ProductPhotoID='5']/@LargePhoto</LargePhoto>
</Production.ProductPhoto>
</ROOT>
Vs po stronie klienta.XPath po stronie serwera
XPath po stronie klienta i XPath po stronie serwera działają tak samo, z wyjątkiem dla tych różnic:
Konwersje danych, które są stosowane przy użyciu kwerend XPath po stronie klient są różne od tych, które są stosowane przy użyciu kwerend XPath po stronie serwera.XPath klienta używa ODDANYCH zamiast trybu konwersji 126.
Podczas określania xml po stronie klient = "0" (FAŁSZ) w szablonie, zażądano formatowanie XML po stronie serwera.Dlatego nie można określić dla ZAGNIEŻDŻONE XML, ponieważ serwer nie rozpoznaje opcji ZAGNIEŻDŻONYCH.Generuje błąd.Należy użyć automatycznego, RAW lub JAWNE tryby, które serwer rozpoznaje.
Podczas określania xml po stronie klient = "1" (true) w szablonie, zażądano formatowanie XML po stronie klient.W takim przypadek można określić dla XML ZAGNIEŻDŻANE.Jeśli określisz dla AUTO XML formatowanie XML występuje po stronie serwera, chociaż xml po stronie klient = "1" określono w szablonie.