XML po stronie klient i serwera stronie Formatowanie (SQLXML 4.0)
W tym temacie opisano ogólne różnice między klient i po stronie serwera SQLXML formatowania XML.
Wiele kwerendy zestaw wierszy nie jest obsługiwana w formatowanie po stronie klient
Kwerendy, która generuje wiele zestawów wierszy nie są obsługiwane, gdy używane jest formatowanie XML po stronie klient.Przypuśćmy na przykład, że masz katalog wirtualny, do których użytkownik ma klient formatowanie określone.Należy wziąć pod uwagę ten szablon próbka ma dwa instrukcji SELECT w <SQL:Query> Blok:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT FirstName FROM Person.Contact FOR XML Nested;
SELECT LastName FROM Person.Contact FOR XML Nested
</sql:query>
</ROOT>
Ten szablon może być wykonywany w kodzie aplikacji i zwracany jest błąd, ponieważ formatowanie XML po stronie klient nie jest obsługiwany format wiele wierszy.Jeśli określisz kwerendy w dwóch oddzielnych <SQL:Query> bloki, otrzyma żądane wyniki.
Sygnatura czasowa mapy inaczej w stosunku do klient.Formatowanie strony serwera
W języku XML po stronie serwera formatowania, kolumna bazy danych timestamp Typ mapuje i8 typu XDR (gdy w kwerendzie określono opcję XMLDATA).
Formatowanie, po stronie klient XML kolumna bazy danych timestamp Wpisz albo mapy uri lub bin.base64 Typ XDR (w zależności od tego, czy określono opcję base64 binarne w kwerendzie). The bin.base64 XDR type is useful if you use the updategram and bulkload features, because this type is converted to the SQL Servertimestamp type.W ten sposób wstawiania, aktualizacji lub operacji usunięcia powiedzie się.
Warianty głębokie użycia w stronie serwera, formatowanie
W formacie XML po stronie serwera są używane głębokie rodzaje typu VARIANT.Jeśli używasz klient XML formatowanie, warianty są konwertowane na ciąg Unicode i podtypów VARIANT nie są używane.
A tryb ZAGNIEŻDŻONE.Tryb AUTO
Tryb NESTED XML FOR po stronie klient jest podobna do tryb automatycznego ustawiania języka XML FOR po stronie serwera, z następującymi wyjątkami:
Kwerendę widoki trybie AUTO po stronie serwera, nazwę widoku są zwracane jako nazwy elementu w wynikowym pliku XML.
For example, assume that the following view is created on the Person.Contact table in the AdventureWorksdatabase:
CREATE VIEW ContactView AS (SELECT ContactID as CID,
FirstName as FName,
LastName as LName
FROM Person.Contact)
Następujący szablon określa kwerenda na widoku ContactView, a także określa formatowanie 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>
Po wykonaniu tego szablonu, zwracany jest następujący kod XML.(Tylko częściowe wyniki są wyświetlane.) Należy zauważyć, że nazwy elementów są nazwy 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 XML po stronie klient, formatowanie, używając odpowiedniej trybu NESTED nazwy tabela bazowa są zwracane w postaci nazwy elementu w wynikowym pliku XML.Na przykład, następujący szablon poprawioną wykonuje te same instrukcja SELECT, ale formatowanie XML jest wykonywane po stronie klient (to znaczy danych xml po stronie klient jest ustawiona 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 powoduje następujące XML.Należy zauważyć, że nazwa elementu w tym przypadek jest nazwa tabela bazowa.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact CID="1" FName="Gustavo" LName="Achong" />
<Person.Contact CID="2" FName="Catherine" LName="Abel" />
...
</ROOT>
Gdy używany jest tryb AUTO XML FOR po stronie serwera, aliasy tabela określonych w kwerendzie są zwracane w postaci nazwy elementów w wynikowym pliku XML.
Na przykład należy wziąć pod uwagę 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.Contact C
FOR XML AUTO
</sql:query>
</ROOT>
Wykonywanie szablon 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>
Gdy używany jest tryb NESTED języka XML dla klient, 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.) Na przykład, należy wziąć pod uwagę 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.Contact C
FOR XML NESTED
</sql:query>
</ROOT>
Wykonywanie szablon daje następujące XML:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Person.Contact fname="Gustavo" lname="Achong" />
<Person.Contact fname="Catherine" lname="Abel" />
...
</ROOT>
Jeśli użytkownik ma kwerendę, która zwraca kolumny jako dbobject kwerendy, nie można używać aliasów w tych kolumnach.
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 nazwy 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 (danych xml po stronie klient = "0"), można użyć tego alias dla kolumn, które zwracają dbobject kwerendy, w którym rzeczywistej nazwy tabel i kolumn są zwracane (nawet jeśli użytkownik ma określone aliasy).Na przykład następujący szablon wykonuje kwerendę i formatowanie XML jest wykonywane na serwerze ( danych xml po stronie klient nie określono opcji a Uruchom na klient nie wybrano opcji dla wirtualnego katalogu głównego).Kwerendy określa również trybie AUTO (nie tryb NESTED po stronie klient).
<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>
W stosunku do klient.Wyrażenie XPath po stronie serwera
XPath po stronie klient i po stronie serwera XPath działają tak samo, z wyjątkiem dla tych różnic:
Podczas konwersji danych, które są stosowane, gdy użyjesz kwerendy XPath klient różnią się od tych, które są stosowane, gdy użyjesz kwerendy XPath po stronie serwera.Wyrażenie XPath klient używa CAST zamiast w trybie CONVERT 126.
Po określeniu danych xml po stronie klient = "0" (false) w szablonie, który żąda formatowania XML po stronie serwera.Z tego powodu można określić dla ZAGNIEŻDŻONE XML, ponieważ serwer nie rozpoznaje opcji NESTED.Spowoduje to wygenerowanie błędu.Należy użyć AUTO, RAW lub JAWNE tryby, które są rozpoznawane przez serwer.
Po określeniu danych xml po stronie klient = "1" (true) w szablonie, który żąda formatowania XML po stronie klient.W takim przypadek można określić dla ZAGNIEŻDŻONE XML.Jeśli określisz AUTO XML do formatowania XML występuje po stronie serwera, chociaż danych xml po stronie klient = "1" jest określona w szablonie.