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
Skopiować powyższy kod schematu 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>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"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.