Udostępnij przez


Coercions typ danych i sql:datatype adnotacja (SQLXML 4.0)

W schematu XSD xsd:type atrybut określa typ danych XSD element lub atrybut. Gdy schematu XSD jest używana w celu wyodrębnienia danych z bazy danych, typ danych określony jest używany do formatowania danych.

Oprócz określenia typu XSD w schemacie, można również określić firmy Microsoft SQL Server Typ danych przy użyciu sql:datatype adnotacja. The xsd:type and sql:datatype attributes control the mapping between XSD data types and SQL Server data types.

xsd:type atrybut

Można użyć xsd:type atrybut, aby określić typ danych XML atrybut lub element, który jest mapowany do kolumna. The xsd:type affects the document that is returned from the server and also the XPath query that is executed.Po wykonaniu kwerendę XPath ze schematem mapowania, która zawiera xsd:typeWyrażenie XPath używa określony typ danych podczas przetwarzania kwerendy. Aby uzyskać więcej informacji na temat sposobu używania XPath xsd:type, zobacz Mapowanie typów danych XSD na typy danych XPath (SQLXML 4.0).

W dokumencie zwracane wszystkie SQL Server typy danych 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 xsd:type wartości.

Typ danych XSD

Konwersja programu SQL Server

Boolean

CONVERT (bit, kolumna)

Data

LEFT(CONVERT(nvarchar(4000), kolumna, 126), 10)

decimal

CONVERT (pieniędzy, kolumna)

id/idref/idrefs

Prefiks ID + CONVERT(nvarchar(4000), kolumna, 126)

nmtoken/nmtokens

Prefiks ID + CONVERT(nvarchar(4000), kolumna, 126)

Godzina

SUBSTRING(CONVERT(nvarchar(4000), kolumna, 126), CHARINDEX(N'T', CONVERT(nvarchar(4000), kolumna, 126) 1 +), 24)

Wszystkie pozostałe

Brak dodatkowych konwersji

Uwaga

Niektóre z wartości zwróconych przez SQL Server może nie być zgodne z typami danych XML, które są określane za pomocą xsd:type, albo, ponieważ konwersja nie jest możliwe (na przykład konwersji "XYZ" decimal Typ danych) lub wartość przekracza zakres dla tego typu danych (na przykład-100000 konwertowane na UnsignedShort Typ XSD). Konwersje typów niezgodne może spowodować lub w dokumentach XML, które nie są prawidłowe SQL Server błędy.

Mapowanie z typami danych programu SQL Server na typy danych XSD

W poniższej tabela przedstawiono mapowanie oczywiste z SQL Server typy danych do typów danych XSD. Jeśli znasz SQL Server Typ, w tej tabela zawiera odpowiedni typ XSD, które można określić w schematu XSD.

Typ danych programu SQL Server

Typ danych XSD

bigint

long

binary

base64Binary

bit

boolean

char

string

datetime

dateTime

decimal

decimal

float

double

image

base64Binary

int

int

money

decimal

nchar

string

ntext

string

nvarchar

string

numeric

decimal

real

float

smalldatetime

dateTime

smallint

short

smallmoney

decimal

sql_variant

string

sysname

string

text

string

timestamp

dateTime

tinyint

unsignedByte

varbinary

base64Binary

varchar

string

uniqueidentifier

string

SQL:DataType adnotacji

The sql:datatype annotation is used to specify the SQL Server data type; this annotation must be specified when:

  • You are bulk loading into a dateTimeSQL Server column from an XSD dateTime, date, or time type.W takim przypadek należy zidentyfikować SQL Server Typ danych kolumna przy użyciu sql:datatype="dateTime". Ta reguła dotyczy również updategrams.

  • You are bulk loading into a column of SQL Serveruniqueidentifier type and the XSD value is a GUID that includes braces ({ and }).Po określeniu sql:datatype="uniqueidentifier", nawiasy klamrowe są usuwane z wartości, przed wstawieniem kolumna. Jeśli sql:datatype nie jest określony, wartość jest wysyłana z nawiasy klamrowe i wstawienie lub aktualizacja nie powiedzie się.

  • Typ danych XML base64Binary mapy i różne SQL Server typy danych)binary, image, lub varbinary). Aby zmapować typu danych XML base64Binary do określonego SQL Server Typ danych, należy użyć sql:datatype adnotacja. Jawnie określa tę adnotację SQL Server Typ danych kolumna, do którego mapowania atrybut. Jest to przydatne, gdy dane są przechowywane w bazach danych.Określając sql:datatype adnotację, można zidentyfikować jawne SQL Server Typ danych.

Zazwyczaj zaleca się określenie sql:datatype w schemacie.

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ślanie xsd:type

W tym przykładzie przedstawiono sposób XSD date Typ określony za pomocą xsd:type atrybuty w schemacie ma wpływ na wynikowym dokumencie XML. Schemat zawiera utworzony widok XML Sales.SalesOrderHeader tabela bazy danych AdventureWorks.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader">
     <xsd:complexType>
       <xsd:attribute name="SalesOrderID" type="xsd:string" /> 
       <xsd:attribute name="CustomerID"   type="xsd:string" /> 
       <xsd:attribute name="OrderDate"    type="xsd:date" /> 
       <xsd:attribute name="DueDate"  /> 
       <xsd:attribute name="ShipDate"  type="xsd:time" /> 
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

W tym schematu XSD ma trzy atrybuty, które zwracają wartości data z SQL Server. Gdy schemat:

  • Określa xsd:type=date na DataZamówienia. część data wartości zwróconej przez atrybutuSQL Server dla DataZamówienia. atrybut jest wyświetlany.

  • Określa xsd:type=time na DataWysyłki część czas wartość zwracana przez atrybutuSQL Server dla DataWysyłki atrybut jest wyświetlany.

  • Nie określono xsd:type na DueDate tę samą wartość, która zostanie zwrócona przez atrybutSQL Server zostanie wyświetlone okno.

Aby przetestować kwerendę XPath próbki względem schematu

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

  2. Skopiuj następujący szablon i wkleić go do pliku tekstowego.Zapisz plik jako xsdTypeT.xml w tym samym katalogu, w którym zapisano xsdType.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="xsdType.xml">
        /Order
      </sql:xpath-query>
    </ROOT>
    

    To ścieżka do katalogu określonego dla mapowania schematu (xsdType.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:\SqlXmlTest\xsdType.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.

W tym polu jest zestaw wyników częściowych:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order SalesOrderID="43659" 
         CustomerID="676" 
         OrderDate="2001-07-01" 
         DueDate="2001-07-13T00:00:00" 
         ShipDate="00:00:00" /> 
  <Order SalesOrderID="43660" 
         CustomerID="117" 
         OrderDate="2001-07-01" 
         DueDate="2001-07-13T00:00:00" 
         ShipDate="00:00:00" /> 
 ...
</ROOT>

Jest to równoważne schematu XDR:

<?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="Sales.SalesOrderHeader">
    <AttributeType name="SalesOrderID" />
    <AttributeType name="CustomerID"  />
    <AttributeType name="OrderDate" dt:type="date" />
    <AttributeType name="DueDate" />
    <AttributeType name="ShipDate" dt:type="time" />

    <attribute type="SalesOrderID" sql:field="OrderID" />
    <attribute type="CustomerID" sql:field="CustomerID" />
    <attribute type="OrderDate" sql:field="OrderDate" />
    <attribute type="DueDate" sql:field="DueDate" />
    <attribute type="ShipDate" sql:field="ShipDate" />
</ElementType>
</Schema>

B.Określanie przy użyciu sql:datatype typ danych SQL

Przykładowy pracy Zobacz przykład k w Przykłady obciążenia zbiorcze XML (SQLXML 4.0). W tym przykładzie tym wartość identyfikatora GUID "{" i "}" jest ładowany zbiorczej.Określa, w tym przykładzie schematu sql:datatype Aby zidentyfikować SQL Server Typ danych jako uniqueidentifier. W tym przykładzie przedstawiono kiedy sql:datatype musi być określona w schemacie.