Coercions typ danych (schematu XDR)
Important Note: |
|---|
W tym temacie jest włączony jako odwołanie w przypadku starszych aplikacji.Żadna praca przyszłe będą mogły wykonać tej funkcji.Należy unikać stosowania tej funkcji w nowej pracy rozwoju.Zamiast tego należy używać adnotacjami schematów XSD tworzenia widoków XML.Aby uzyskać więcej informacji zobaczWprowadzenie do adnotacjami schematy XSD (SQLXML 4.0).Istniejące schematy XDR adnotacjami można przekonwertować schematów XSD.Aby uzyskać więcej informacji zobaczKonwertowanie adnotacjami schematy XDR Equivalent schematy XSD (SQLXML 4.0). |
Może być określony typ danych elementu lub atrybut w schematu XDR.Gdy schematu XDR służy do wyodrębniania danych z bazy danych, format danych jest wyjście z kwerendy.The dt:type and sql:datatype annotations are used to control the mapping between XDR data types and Microsoft SQL Server data types.
dt:type
Można użyć dt:type atrybut, aby określić typ danych XML atrybut lub element, który jest mapowany do kolumna. The dt:type atrybut can be specified on <AttributeType> or <ElementType>. The dt:type affects the document returned from the server and also the XPath query executed.Kiedy kwerendę XPath jest wykonywane przed zawierającego schemat mapowania dt:typeWyrażenie XPath używa typu danych wskazane podczas przetwarzania kwerendy. Aby uzyskać więcej informacji na temat sposobu używania XPath dt:type, zobacz Typy danych XPath (SQLXML 4.0).
W przypadku dokumentów zwrócił wszystkich typów danych programu SQL Server są konwertowane na liczbami w postaci ciąg.Niektóre typy danych są wymagane dodatkowe konwersje.W poniższej tabela przedstawiono konwersje, które są używane dla różnych dt:type wartości.
Typ danych XML |
Konwersja programu SQL Server |
|---|---|
bit |
CONVERT (bit, kolumna) |
data |
LEFT(CONVERT(nvarchar(4000), kolumna, 126), 10) |
Fixed.14.4 |
CONVERT (pieniędzy, kolumna) |
id/idref/idrefs |
Prefiks ID + CONVERT(nvarchar(4000), kolumna, 126) |
nmtoken/nmtokens |
Prefiks ID + CONVERT(nvarchar(4000), kolumna, 126) |
czas/czas.TZ |
SUBSTRING(CONVERT(nvarchar(4000), kolumna, 126), CHARINDEX(N'T', CONVERT(nvarchar(4000), kolumna, 126) 1 +), 24) |
Wszystkie pozostałe |
Brak dodatkowych konwersji |
Należy zauważyć, że niektóre SQL ServerNie można konwertować wartości dla niektórych typów danych XML, ponieważ konwersja nie jest możliwe (na przykład "XYZ" liczbowy typ danych) lub ponieważ wartość przekracza zakres dla tego typu danych (na przykład-100000 konwertowane na ui2). Konwersje typów niezgodne może spowodować nieprawidłowe dokumentów XML lub błędów programu SQL Server.
Mapowanie z typami danych programu SQL Server na typy danych XML
Tabela przedstawia mapowanie fizyczne SQL Server typy danych do typów danych XML.
Typ danych programu SQL Server |
Typ danych XML |
|---|---|
bigint |
i8 |
binary |
bin.base64 |
bit |
boolean |
char |
char |
datetime |
datetime |
decimal |
r8 |
float |
r8 |
image |
bin.base64 |
int |
int |
money |
r8 |
nchar |
string |
ntext |
string |
nvarchar |
string |
numeric |
r8 |
real |
r4 |
smalldatetime |
datetime |
smallint |
i2 |
smallmoney |
fixed.14.4 |
sysname |
string |
text |
string |
timestamp |
ui8 |
tinyint |
ui1 |
varbinary |
bin.base64 |
varchar |
string |
uniqueidentifier |
uuid |
SQL:DataType
Typ danych XML bin.base64 mapy do różnych firmy Microsoft SQL Server typy danych)binary, image, varbinary). To clearly map the XML data type bin.base64 to a specific SQL Server data, the sql:datatype annotation is used.sql:datatype specifies the SQL Server data type of the column to which the attribute maps.
Jest to przydatne, gdy dane są przechowywane w bazie danych.Określając sql:datatype adnotację, można zidentyfikować jawne SQL Server Typ danych. Element danych, są następnie przechowywane jako typ określony w sql:datatype.
The sql:datatype annotation supports all SQL Server built-in data types.(Typy danych zdefiniowane przez użytkownika lub synonimów nie są obsługiwane.) Precision and scale are also supported, for example, sql:datatype="nvarchar"and sql:datatype="nchar(10)".
Określanie XDR i SQL Server typy danych w schemacie mapowania może pomóc wyeliminować konwersje niepotrzebne dane w kwerendach SQL. Na przykład, wyrażenie XPath musi konwertować z SQL Server Typ danych na typ XDR, a następnie typu XDR na typ XPath. Gdy sql:datatype określono typ XDR i XPath Określa, że konwersja nie jest konieczne, XPath nie robi.
W odniesieniu do kolumny klucz podstawowy eliminacji te konwersje może doprowadzić do poprawy wydajności znaczący.Na przykład następującą kwerendę zazwyczaj wymaga konwersji identyfikator klienta do ciąg (nvarchar), aby zagwarantować prawidłowe wyniki:
Customer[@CustomerID='ALFKI']
Jeżeli identyfikator klienta jest odnotowany w schemacie z sql:datatype="nvarchar"Wyrażenie XPath aby uniknąć konwersji niepotrzebne dane.
Przykłady
Aby utworzyć próbek pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji zobaczWymagania dotyczące uruchamianie SQLXML przykłady.
A.Określ dt:type na atrybut
W tym schematu XDR dt:type jest określony na OrdDate and DataWysyłki atrybuty.
Dla ReqDate atrybut XPath, nie jest określony typ danych. Dlatego też, zwraca wyrażenie XPath SQL Server wartości typu Data/Godzina pobierania z kolumna DataWymagana w bazie danych.
"Data" XPath typ danych jest określona na OrdDate atrybut. Wyrażenie XPath zwraca tylko część data wartości (i czas nie) pobierania z kolumna DataZamówienia.
"Czas" XPath typ danych jest określona w atrybucie DataWysyłki.Wyrażenie XPath zwraca tylko część razem z wartościami (i bez data) pobierania z kolumna DataWysyłki.
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Order" sql:relation="Orders">
<AttributeType name="OID" />
<AttributeType name="CustID" />
<AttributeType name="OrdDate" dt:type="date" />
<AttributeType name="ReqDate" />
<AttributeType name="ShipDate" dt:type="time" />
<attribute type="OID" sql:field="OrderID" />
<attribute type="CustID" sql:field="CustomerID" />
<attribute type="OrdDate" sql:field="OrderDate" />
<attribute type="ReqDate" sql:field="RequiredDate" />
<attribute type="ShipDate" sql:field="ShippedDate" />
</ElementType>
</Schema>
Aby przetestować kwerendę XPath próbki względem schematu
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako dataTypeXdr.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako dataTypeXdrT.xml w tym samym katalogu, w którym zapisano dataTypeXdr.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="dataTypeXdr.xml"> /Order[@OID=43860] </sql:xpath-query> </ROOT>Adres ten jest wykonywany w szablonie:
http://IISServer/AdventureWorks/template/dataTypeXdrT.xml
Poniżej znajduje się zestaw wyników:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order OID="43860" CustID="1" OrdDate="2001-08-01" ReqDate="2001-08-13T00:00:00" ShipDate="00:00:00" />
</ROOT>
B.Określ sql:datatype na atrybut
W tym przykładzie sql:datatype Służy do identyfikowania SQL Server Typ danych kolumna LargePhoto.
<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="ProductPhoto" sql:relation="Production.ProductPhoto">
<AttributeType name="PhotoID" />
<AttributeType name="filename" />
<AttributeType name="photo" sql:datatype="image" />
<attribute type="PhotoID" sql:field="ProductPhotoID" />
<attribute type="filename" sql:field="LargePhotoFileName" />
<attribute type="photo" sql:field="LargePhoto" />
</ElementType>
</Schema>
Aby przetestować kwerendę XPath próbki względem schematu
Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako DataTypeXdr2.xml.
Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako DataTypeXdr2T.xml w tym samym katalogu, w którym zapisano DataTypeXdr2.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="DataTypeXdr2.xml"> /ProductPhoto[@PhotoID="100"] </sql:xpath-query> </ROOT>To ścieżka do katalogu określonego dla mapowania schematu (DataTypeXdr2.xml) jest względna w stosunku do katalogu, w którym są zapisywane w szablonie.Ścieżka bezwzględna również można określić, na przykład:
mapping-schema="C:\MyDir\DataTypeXdr2.xml"Tworzenie i używanie skryptu testu 4.0 SQLXML (Sqlxml4test.vbs) do wykonać tego szablonu.
Aby uzyskać więcej informacji zobaczPrzy użyciu obiektu ADO do wykonywania SQLXML bada 4.0.
Poniżej znajduje się zestaw wyników:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ProductPhoto PhotoID="100" filename="racer02_red_large.gif"
photo="Binary_base64_image_returned_here"/>
</ROOT>
Important Note: