Konversi Jenis Data dan anotasi sql:datatype (SQLXML 4.0)

Berlaku untuk:Database SQL ServerAzure SQL

Dalam skema XSD, atribut xsd:type menentukan jenis data XSD dari elemen atau atribut. Ketika skema XSD digunakan untuk mengekstrak data dari database, jenis data yang ditentukan digunakan untuk memformat data.

Selain menentukan jenis XSD dalam skema, Anda juga dapat menentukan jenis data Microsoft SQL Server dengan menggunakan anotasi sql:datatype. Atribut xsd:type dan sql:datatype mengontrol pemetaan antara jenis data XSD dan jenis data SQL Server.

Atribut xsd:type

Anda dapat menggunakan atribut xsd:type untuk menentukan jenis data XML dari atribut atau elemen yang memetakan ke kolom. xsd:type memengaruhi dokumen yang dikembalikan dari server dan juga kueri JalurX yang dijalankan. Saat kueri JalurX dijalankan terhadap skema pemetaan yang berisi xsd:type, XPath menggunakan jenis data yang ditentukan saat memproses kueri. Untuk informasi selengkapnya tentang cara XPath menggunakan xsd:type, lihat Memetakan Jenis Data XSD ke Jenis Data JalurX (SQLXML 4.0).

Dalam dokumen yang dikembalikan, semua SQL Server jenis data dikonversi menjadi representasi string. Beberapa jenis data memerlukan konversi tambahan. Tabel berikut mencantumkan konversi yang digunakan untuk berbagai nilai xsd:type .

Jenis data XSD konversi SQL Server
Boolean CONVERT(bit, COLUMN)
Tanggal LEFT(CONVERT(nvarchar(4000), COLUMN, 126), 10)
decimal CONVERT(money, COLUMN)
id/idref/idrefs id-prefix + CONVERT(nvarchar(4000), COLUMN, 126)
nmtoken/nmtokens id-prefix + CONVERT(nvarchar(4000), COLUMN, 126)
Waktu SUBSTRING(CONVERT(nvarchar(4000), COLUMN, 126), 1+CHARINDEX(N'T', CONVERT(nvarchar(4000), COLUMN, 126)), 24)
Semua lainnya Tidak ada konversi tambahan

Catatan

Beberapa nilai yang dikembalikan oleh SQL Server mungkin tidak kompatibel dengan jenis data XML yang ditentukan dengan menggunakan xsd:type, baik karena konversi tidak dimungkinkan (misalnya, mengonversi "XYZ" ke jenis data desimal) atau karena nilai melebihi rentang tipe data tersebut (misalnya, -100000 dikonversi ke jenis UnsignedShort XSD). Konversi jenis yang tidak kompatibel dapat mengakibatkan dokumen XML yang tidak valid, atau dalam kesalahan SQL Server.

Pemetaan dari Jenis Data SQL Server ke Jenis Data XSD

Tabel berikut ini memperlihatkan pemetaan yang jelas dari SQL Server jenis data ke jenis data XSD. Jika Anda mengetahui jenis SQL Server, tabel ini menyediakan jenis XSD terkait yang dapat Anda tentukan dalam skema XSD.

Tipe data SQL Server Jenis data XSD
bigint panjang
binary base64Binary
bit boolean
char string
datetime tanggalWaktu
desimal desimal
Float double
gambar base64Binary
int int
money desimal
nchar string
ntext string
nvarchar string
numerik desimal
nyata Float
smalldatetime tanggalWaktu
smallint pendek
smallmoney desimal
aql_variant string
nama sysname string
teks string
timestamp tanggalWaktu
tinyint unsignedByte
varbinary base64Binary
varchar string
uniqueidentifier string

sql:datatype Anotasi

Anotasi sql:datatype digunakan untuk menentukan jenis data SQL Server; anotasi ini harus ditentukan ketika:

  • Anda memuat secara massal ke kolom dateTime SQL Server dari tanggalWaktu, tanggal, atau jenis waktu XSD. Dalam hal ini, Anda harus mengidentifikasi jenis data kolom SQL Server dengan menggunakan sql:datatype="dateTime". Aturan ini juga berlaku untuk updategram.

  • Anda memuat secara massal ke dalam kolom jenis pengidentifikasi unik SQL Server dan nilai XSD adalah GUID yang menyertakan kurung kurawal ({ dan }). Saat Anda menentukan sql:datatype="uniqueidentifier", kurung kurawal dihapus dari nilai sebelum dimasukkan ke dalam kolom. Jika sql:datatype tidak ditentukan, nilai dikirim dengan kurung kurawal, dan penyisipan atau pembaruan gagal.

  • Jenis data XML base64Binary memetakan berbagai jenis data SQL Server (biner, gambar, atau varbinary). Untuk memetakan tipe data XML base64Binary ke jenis data SQL Server tertentu, gunakan anotasi sql:datatype. Anotasi ini menentukan jenis data SQL Server eksplisit kolom tempat atribut dipetakan. Ini berguna ketika data disimpan dalam database. Dengan menentukan anotasi sql:datatype, Anda dapat mengidentifikasi jenis data SQL Server eksplisit.

Umumnya disarankan agar Anda menentukan sql:datatype dalam skema.

Contoh

Untuk membuat sampel kerja menggunakan contoh berikut, Anda harus memenuhi persyaratan tertentu. Untuk informasi selengkapnya, lihat Persyaratan untuk Menjalankan Contoh SQLXML.

J. Menentukan xsd:type

Contoh ini menunjukkan bagaimana jenis tanggal XSD yang ditentukan dengan menggunakan atribut xsd:type dalam skema memengaruhi dokumen XML yang dihasilkan. Skema ini menyediakan tampilan XML tabel Sales.SalesOrderHeader dalam database 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>  

Dalam skema XSD ini, ada tiga atribut yang mengembalikan nilai tanggal dari SQL Server. Saat skema:

  • Menentukan xsd:type=date pada atribut OrderDate, bagian tanggal dari nilai yang dikembalikan oleh SQL Server untuk atribut OrderDate ditampilkan.

  • Menentukan xsd:type=time pada atribut ShipDate, bagian waktu dari nilai yang dikembalikan oleh SQL Server untuk atribut ShipDate ditampilkan.

  • Tidak menentukan xsd:type pada atribut DueDate, nilai yang sama yang dikembalikan oleh SQL Server ditampilkan.

Untuk menguji sampel kueri JalurX terhadap skema
  1. Salin kode skema di atas dan tempelkan ke dalam file teks. Simpan file sebagai xsdType.xml.

  2. Salin templat berikut dan tempelkan ke dalam file teks. Simpan file sebagai xsdTypeT.xml di direktori yang sama tempat Anda menyimpan xsdType.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="xsdType.xml">  
        /Order  
      </sql:xpath-query>  
    </ROOT>  
    

    Jalur direktori yang ditentukan untuk skema pemetaan (xsdType.xml) relatif terhadap direktori tempat templat disimpan. Jalur absolut juga dapat ditentukan, misalnya:

    mapping-schema="C:\SqlXmlTest\xsdType.xml"  
    
  3. Buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat.

    Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Berikut adalah tataan hasil parsial:

<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>  

Ini adalah skema XDR yang setara:

<?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. Menentukan jenis data SQL menggunakan sql:datatype

Untuk sampel yang berfungsi, lihat Contoh G dalam Contoh Pemuatan Massal XML (SQLXML 4.0). Dalam contoh ini, nilai GUID termasuk "{" dan "}" dimuat secara massal. Skema dalam contoh ini menentukan sql:datatype untuk mengidentifikasi jenis data SQL Server sebagai pengidentifikasi unik. Contoh ini menggambarkan kapan sql:datatype harus ditentukan dalam skema.