Udostępnij przez


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

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

Oprócz określenia typ XSD w schemacie, można również określić Microsoft SQL Server typu danych przy użyciu sql:datatype adnotacji.xsd:type i sql:datatype atrybuty kontrolę mapowania między typów danych XSD i SQL Server typów danych.

xsd: typ atrybutu

Można użyć xsd:type atrybutu, aby określić typ danych XML, atrybut lub element, który mapuje do kolumna.xsd:type Dotyczy dokumentu, który jest zwracane z serwera, a także kwerendę XPath, który jest wykonywany.Po wykonaniu schematem mapowania, która zawiera kwerendę XPath xsd:type, XPath używa określony typ danych podczas przetwarzania kwerendy.Aby uzyskać więcej informacji dotyczących sposobu używania XPath xsd:type, zobacz Mapowania typów danych XSD typy danych XPath (SQLXML 4.0).

W dokumencie zwracane wszystkie SQL Server typy danych są konwertowane do reprezentacji ciąg.Niektóre typy danych wymagają dodatkowych konwersje.W poniższej tabela przedstawiono konwersje, które są używane do różnych xsd:type wartości.

Typ danych XSD

Konwersja programu SQL Server

Boolean

Konwertowanie (bit, kolumna)

Data

Left(Convert(nvarchar(4000), kolumna 126) 10)

dziesiętny

Konwertowanie (pieniędzy, kolumna)

id/idref/idrefs

Identyfikator prefiks + CONVERT(nvarchar(4000) kolumny, 126)

nmtoken/nmtokens

Identyfikator prefiks + CONVERT(nvarchar(4000) kolumny, 126)

Godzina

SUBSTRING(Convert(nvarchar(4000), kolumny, 126), 1 + CHARINDEX (NT ", CONVERT(nvarchar(4000), kolumny, 126)), 24)

Wszystkie inne

Brak dodatkowych

Ostrzeżenie

Niektóre wartości zwracane 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" do decimal Typ danych) lub ponieważ wartość przekracza zakres typu danych (na przykład na-100000 UnsignedShort typ XSD).Konwersje typów niezgodne może spowodować dokumentów XML, które są nieprawidłowe lub w SQL Server błędy.

Mapowanie z typami danych programu SQL Server do typów danych XSD

W poniższej tabela przedstawiono oczywiste mapowania z SQL Server typów danych do typów danych XSD.Jeśli znasz SQL Server typu, ta tabela zapewnia odpowiedni typ XSD, który 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

sql:datatype Adnotacji jest używany do określenia SQL Server typu danych; Ta adnotacja musi być określony, gdy:

  • You are bulk loading into a dateTime SQL Server column from an XSD dateTime, date, or time type.W takim przypadek należy zidentyfikować SQL Server Typ danych kolumna za pomocą sql:datatype="dateTime".Ta reguła ma zastosowanie również do updategrams.

  • You are bulk loading into a column of SQL Server uniqueidentifier type and the XSD value is a GUID that includes braces ({ and }).Podczas określania sql:datatype="uniqueidentifier", nawiasy klamrowe są usuwane z wartości przed wstawieniem kolumna.Jeśli sql:datatype nie jest określony, wartość jest wysyłany wraz z nawiasami klamrowymi i kończy się niepowodzeniem insert lub update.

  • Typ danych XML base64Binary mapy do różnych SQL Server typów danych (binary, image, lub varbinary).Mapowanie typu danych XML base64Binary z określonym SQL Server Typ danych za pomocą sql:datatype adnotacji.To adnotacji Określa jawny SQL Server Typ danych kolumna, której atrybut map.Jest to przydatne, gdy dane są przechowywane w bazach danych.Określając sql:datatype adnotacji, można zidentyfikować jawne SQL Server typu danych.

Ogólnie zaleca się określenie sql:datatype w schemacie.

Przykłady

Aby utworzyć próbki pracy przy użyciu poniższych przykładach, musi spełniać określone wymagania.Aby uzyskać więcej informacji, zobacz Wymagania dotyczące uruchamianie przykładów SQLXML.

A.Określanie xsd: typ

W tym przykładzie przedstawiono sposób XSD date typu określonego za pomocą xsd:type atrybut w schemacie dotyczy wynikowy dokument XML.Schemat zawiera widok XML tabela Sales.SalesOrderHeader w AdventureWorks2008R2 bazy danych.

<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 są trzy atrybuty, które zwracają wartość data z SQL Server.Gdy schematu:

  • Określa xsd:type=date na DataZamówienia atrybutu Data część wartości zwracane przez SQL Server dla DataZamówienia atrybut jest wyświetlany.

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

  • Nie określono xsd:type na DueDate atrybut tej samej wartości zwrócone przez SQL Server jest wyświetlany.

Aby przetestować przykładowe kwerendy XPath względem schematu

  1. Kod schematu skopiować 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>
    

    Ścieżka katalogu określonego dla mapowania schematu (xsdType.xml) jest katalog, w którym zapisany szablon.Ścieżka bezwzględna również można określić, na przykład:

    mapping-schema="C:\SqlXmlTest\xsdType.xml"
    
  3. Tworzenie i używanie szablon wykonać skryptu testu 4.0 SQLXML (Sqlxml4test.vbs).

    Aby uzyskać więcej informacji, zobacz Przy użyciu ADO SQLXML wykonanie kwerendy 4.0.

Oto częściowe zestaw wyników:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order SalesOrderID="43659" 
         CustomerID="676" 
         OrderDate="2005-07-01" 
         DueDate="2005-07-13T00:00:00" 
         ShipDate="00:00:00" /> 
  <Order SalesOrderID="43660" 
         CustomerID="117" 
         OrderDate="2005-07-01" 
         DueDate="2005-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ślając typ danych SQL przy użyciu sql:datatype

Aby próbki roboczej Zobacz przykład g w Przykłady obciążenia luzem XML (SQLXML 4.0).W tym przykładzie wartość identyfikatora GUID, łącznie z "{" i "}" jest ładowane luzem.Określa schemat w tym przykładzie sql:datatype do identyfikowania SQL Server typu danych jako uniqueidentifier.W tym przykładzie ilustrują, kiedy sql:datatype musi być określona w schemacie.