Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Database
V XSD schématu specifikuje atribut xsd:type datový typ prvku nebo atributu XSD. Když je schéma XSD použito k extrakci dat z databáze, k jejich formátování se použije specifikovaný typ dat.
Kromě zadání typu XSD ve schématu můžete také specifikovat datový typ Microsoft SQL Server pomocí anotace sql:datatype . Atributy xsd:type a sql:datatype řídí mapování mezi XSD datovými typy a SQL Server typy.
xsd:type atribut
Atribut xsd:type můžete použít k určení XML datového typu atributu nebo prvku, který se mapuje na sloupec. xsd:type ovlivňuje dokument vrácený ze serveru a také dotaz XPath, který je vykonán. Když je dotaz XPath vykonán proti mapovacímu schématu obsahujícímu xsd:type, XPath při zpracování dotazu použije daný datový typ. Pro více informací o tom, jak XPath používá xsd:type, viz Mapování datových typů XSD na XPath datové typy (SQLXML 4.0).
V vráceném dokumentu jsou všechny datové typy SQL Server převedeny na reprezentace řetězců. Některé datové typy vyžadují další konverze. Následující tabulka uvádí konverze používané pro různé hodnoty xsd:type .
| Datový typ XSD | Konverze na SQL Server |
|---|---|
| logický | CONVERT(bit, SLOUPEC) |
| Date | VLEVO (KONVERTIT(NVARCHAR(4000), SLOUPEC, 126), 10) |
| desítkové číslo | KONVERTOVAT (PENÍZE, SLOUPEC) |
| id/idref/idrefs | id-prefix + CONVERT(nvarchar(4000), SLOUPEC, 126) |
| nmtoken/nmtokens | id-prefix + CONVERT(nvarchar(4000), SLOUPEC, 126) |
| Time | PODSTRING(CONVERT(NVARCHAR(4000), SLOUPEC, 126), 1+CHARINDEX(N'T', KONVERT(nvarchar(4000), SLOUPEC, 126)), 24) |
| Všechny ostatní | Žádná další přestavba |
Poznámka:
Některé hodnoty vrácené SQL Serverem nemusí být kompatibilní s XML datovými typy specifikovanými pomocí xsd:type, buď proto, že převod není možný (například převod "XYZ" na desetinný datový typ), nebo protože hodnota přesahuje rozsah daného datového typu (například -100000 převedeno na typ UnsignedShort XSD). Nekompatibilní převody typů mohou vést k neplatným XML dokumentům nebo k chybám SQL Serveru.
Mapování z datových typů SQL Server na XSD datové typy
Následující tabulka ukazuje zřejmé mapování z datových typů SQL Server na XSD datové typy. Pokud znáte typ SQL Serveru, tato tabulka poskytuje odpovídající typ XSD, který můžete zadat ve schématu XSD.
| Datový typ SQL Serveru | Datový typ XSD |
|---|---|
| bigint | dlouhý |
| binary | base64Binary |
| bit | booleovský |
| znak | string |
| datetime | dateTime |
| decimal | decimal |
| float | double |
| image | base64Binary |
| int | int |
| peníze | decimal |
| nchar | string |
| ntext | string |
| nvarchar | string |
| číselný | decimal |
| skutečné | float |
| smalldatetime | dateTime |
| smallint | krátký |
| málo peněz | decimal |
| sql_variant | string |
| sysname | string |
| text | string |
| časová značka | dateTime |
| tinyint | unsignedByte |
| varbinary | base64Binary |
| varchar | string |
| uniqueidentifier | string |
sql:Datatype Annotation
Anotace sql:datatype se používá k určení datového typu SQL Server; Tato poznámka musí být specifikována, když:
Hromadně načítáte do sloupce dateTimeSQL Server z XSDdateTime, data nebo času typu. V tomto případě musíte identifikovat typ dat sloupce SQL Server pomocí sql:datatype="dateTime". Toto pravidlo platí i pro updategramy.
Hromadně načítáte do sloupce typu SQL Server uniqueidentifier a hodnota XSD je GUID, který obsahuje závorky ({ a }). Když zadáte sql:datatype="uniqueidentifier", závorky se z hodnoty odstraní ještě před jejím vložením do sloupce. Pokud sql:datatype není specifikováno, hodnota se odešle spolu se závorkami a vložení nebo aktualizace selže.
XML datový typ base64Binary se mapuje na různé typy dat SQL Server (binární, obrazové nebo varbinární). Pro mapování XML datového typu base64Binary na konkrétní typ dat SQL Server použijte anotaci sql:datatype . Tato anotace specifikuje explicitní typ dat SQL Server ve sloupci, na který se atribut mapuje. To je užitečné, když jsou data ukládána do databází. Zadáním anotace sql:datatype můžete identifikovat explicitní datový typ SQL Serveru.
Obecně se doporučuje specifikovat sql:datatype ve schématu.
Examples
Pro vytvoření pracovních vzorků podle následujících příkladů musíte splnit určité požadavky. Pro více informací viz Požadavky na spouštění SQLXML Examples.
A. Specifikace xsd:type
Tento příklad ukazuje, jak XSD datum typ specifikovaný pomocí atributu xsd:type ve schématu ovlivňuje výsledný XML dokument. Schéma poskytuje XML zobrazení tabulky Sales.SalesOrderHeader v databázi 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>
V tomto XSD schématu existují tři atributy, které vracejí hodnotu data ze SQL Serveru. Když schéma:
Specifikuje xsd:type=date na atributu OrderDate , kde se zobrazí část hodnoty vrácené SQL Serverem pro atribut OrderDate .
Specifikuje xsd:type=time na atributu ShipDate , což je časová část hodnoty, kterou SQL Server vrací pro atribut ShipDate .
Nespecifikuje xsd:type na atributu DueDate , zobrazí se stejná hodnota, kterou SQL Server vrací.
Pro testování vzorku dotazu XPath proti schématu
Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako xsdType.xml.
Zkopírujte následující šablonu a vložte ji do textového souboru. Ulož soubor jako xsdTypeT.xml do stejného adresáře, kde jsi uložil xsdType.xml.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="xsdType.xml"> /Order </sql:xpath-query> </ROOT>Adresářová cesta určená pro mapovací schéma (xsdType.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:
mapping-schema="C:\SqlXmlTest\xsdType.xml"Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.
Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.
Tady je částečná sada výsledků:
<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>
Toto je ekvivalentní schéma 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. Specifikace SQL datového typu pomocí sql:datatype
Pro pracovní vzorek viz Příklad G v XML Bulk Load Examples (SQLXML 4.0). V tomto příkladu je hromadně načítána hodnota GUID obsahující "{" a "}". Schéma v tomto příkladu specifikuje sql:datatyp pro identifikaci datového typu SQL Server jako uniqueidentifier. Tento příklad ilustruje, kdy je nutné ve schématu specifikovat sql:datatype .