Udostępnij przez


Coercions typ danych (schematu XDR)

Important noteImportant 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

  1. Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako dataTypeXdr.xml.

  2. 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>
    
  3. 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

  1. Skopiować powyższy kod schematu i wkleić go do pliku tekstowego.Zapisz plik jako DataTypeXdr2.xml.

  2. 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"
    
  3. 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>