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
Kod schematu skopiować i wkleić go do pliku tekstowego.Zapisz plik jako xsdType.xml.
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"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.