Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
In een XSD-schema specificeert het xsd:type-attribuut het XSD-datatype van een element of attribuut. Wanneer een XSD-schema wordt gebruikt om gegevens uit de database te halen, wordt het gespecificeerde datatype gebruikt om de data te formatteren.
Naast het specificeren van een XSD-type in een schema, kun je ook een Microsoft SQL Server-datatype specificeren door gebruik te maken van de sql:datatype-annotatie . De attributen xsd:type en sql:datatype regelen de mapping tussen XSD-datatypes en SQL Server-datatypes.
xsd:type Attribuut
Je kunt het xsd:type-attribuut gebruiken om het XML-datatype van een attribuut of element dat aan een kolom wordt gekoppeld aan te geven. De xsd:type beïnvloedt het document dat van de server wordt teruggestuurd en ook de XPath-query die wordt uitgevoerd. Wanneer een XPath-query wordt uitgevoerd tegen een mappingschema dat xsd:type bevat, gebruikt XPath het opgegeven datatype bij het verwerken van de query. Voor meer informatie over hoe XPath xsd:type gebruikt, zie Mapping XSD Data Types to XPath Data Types (SQLXML 4.0).
In een geretourneerd document worden alle SQL Server-gegevenstypen omgezet in stringrepresentaties. Sommige datatypen vereisen extra conversies. De volgende tabel geeft een overzicht van de conversies die worden gebruikt voor verschillende xsd:type-waarden .
| XSD-datatype | SQL Server-conversie |
|---|---|
| Booleaan | CONVERT(bit, KOLOM) |
| Datum | LINKS(CONVERT(nvarchar(4000), KOLOM, 126), 10) |
| decimal | CONVERT(geld, KOLOM) |
| id/idref/idrefs | id-prefix + CONVERT(nvarchar(4000), KOLOM, 126) |
| NMToep/NMToeps | id-prefix + CONVERT(nvarchar(4000), KOLOM, 126) |
| Time | SUBSTRING(CONVERT(NVARCHAR(4000), KOLOM, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), KOLOM, 126)), 24) |
| Alle andere | Geen extra ombouw |
Opmerking
Sommige waarden die door SQL Server worden teruggegeven, zijn mogelijk niet compatibel met de XML-datatypes die zijn gespecificeerd met xsd:type, hetzij omdat de conversie niet mogelijk is (bijvoorbeeld het converteren van "XYZ" naar een decimale datatype) of omdat de waarde het bereik van dat datatype overschrijdt (bijvoorbeeld -100000 omgezet naar een UnsignedShort XSD-type). Incompatibele typeconversies kunnen resulteren in XML-documenten die niet geldig zijn, of in SQL Server-fouten.
Mapping van SQL Server-datatypes naar XSD-datatypes
De volgende tabel toont een duidelijke mapping van SQL Server-datatypes naar XSD-datatypes. Als je het SQL Server-type kent, geeft deze tabel het bijbehorende XSD-type dat je kunt specificeren in het XSD-schema.
| SQL Server-gegevenstype | XSD-datatype |
|---|---|
| bigint | lang |
| binary | base64Binary |
| bit | Booleaanse |
| teken | string |
| datetime | dateTime |
| decimal | decimal |
| float | dubbele |
| image | base64Binary |
| int | int |
| geld | decimal |
| nchar | string |
| ntext | string |
| nvarchar | string |
| numeriek | decimal |
| echte | float |
| smalldatetime | dateTime |
| smallint | kort |
| kleingeld | decimal |
| sql_variant | string |
| sysname | string |
| tekst | string |
| tijdstempel | dateTime |
| tinyint | unsignedByte |
| varbinary | base64Binary |
| varchar | string |
| uniqueidentifier | string |
sql:datatype Annotatie
De sql:datatype-annotatie wordt gebruikt om het SQL Server-datatype te specificeren; Deze annotatie moet worden gespecificeerd wanneer:
Je laadt bulk in een dateTimeSQL Server-kolom vanuit een XSD dateTime-, datum- of tijdtype . In dit geval moet je het SQL Server-kolomdatatype identificeren door sql:datatype="dateTime" te gebruiken. Deze regel geldt ook voor updategrammen.
Je laadt bulk in een kolom met het SQL Server uniqueidentifier-type en de XSD-waarde is een GUID met klemtekens ({ en }). Wanneer je sql:datatype="uniqueidentifier" specificeert, worden de haakjes uit de waarde verwijderd voordat deze in de kolom wordt ingevoegd. Als sql:datatype niet wordt gespecificeerd, wordt de waarde met de haakjes verzonden en mislukt de insert- of update.
Het XML-datatype base64Binary wordt gekoppeld aan verschillende SQL Server-datatypes (binair, image of varbinary). Om het XML-datatype base64Binary te mappen naar een specifiek SQL Server-datatype, gebruik je de sql:datatype-annotatie . Deze annotatie specificeert het expliciete SQL Server-datatype van de kolom waaraan het attribuut wordt gekoppeld. Dit is handig wanneer data in de databases wordt opgeslagen. Door de sql:datatype-annotatie te specificeren, kun je het expliciete SQL Server-datatype identificeren.
Het wordt over het algemeen aanbevolen om sql:datatype in het schema te specificeren.
Voorbeelden
Om werkmonsters te maken met de volgende voorbeelden, moet je aan bepaalde eisen voldoen. Voor meer informatie, zie Vereisten voor het uitvoeren van SQLXML-voorbeelden.
Eén. Het specificeren van xsd:type
Dit voorbeeld laat zien hoe een XSD-datumtype dat wordt gespecificeerd door het xsd:type-attribuut in het schema te gebruiken, het resulterende XML-document beïnvloedt. Het schema biedt een XML-weergave van de Sales.SalesOrderHeader-tabel in de AdventureWorks-database.
<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>
In dit XSD-schema zijn er drie attributen die een datumwaarde teruggeven vanuit SQL Server. Wanneer het schema:
Specificeert xsd:type=date op het OrderDate-attribuut , het datumgedeelte van de waarde die door SQL Server wordt geretourneerd voor het OrderDate-attribuut wordt weergegeven.
Specificeert xsd:type=time op het ShipDate-attribuut ; het tijdsdeel van de waarde dat door SQL Server wordt teruggegeven voor het ShipDate-attribuut wordt weergegeven.
Specificeert xsd:type niet op het DueDate-attribuut ; dezelfde waarde die door SQL Server wordt teruggegeven wordt weergegeven.
Om een voorbeeld van een XPath-query te testen tegen het schema
Kopieer de bovenstaande schemacode en plak deze in een tekstbestand. Sla het bestand op als xsdType.xml.
Kopieer het volgende sjabloon en plak het in een tekstbestand. Sla het bestand op als xsdTypeT.xml in dezelfde map waar je xsdType.xmlhebt opgeslagen.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="xsdType.xml"> /Order </sql:xpath-query> </ROOT>Het directorypad dat voor het mappingschema (xsdType.xml) is gespecificeerd is relatief tot de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:
mapping-schema="C:\SqlXmlTest\xsdType.xml"Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.
Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
Dit is de gedeeltelijke resultatenset:
<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>
Dit is het equivalente XDR-schema:
<?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. SQL-datatype specificeren met sql:datatype
Voor een werkvoorbeeld, zie Voorbeeld G in XML Bulk Load Examples (SQLXML 4.0). In dit voorbeeld wordt een GUID-waarde met "{" en "}" bulkgeladen. Het schema in dit voorbeeld specificeert sql:datatype om het SQL Server-datatype als uniqueidentifier te identificeren. Dit voorbeeld illustreert wanneer sql:datatype in het schema moet worden gespecificeerd.