Aracılığıyla paylaş


XML, saat, tarih, datetime2 ve datetimeoffset veri türleri ile kullanma

Varolan XML şeması belgesi SqlTypes.xsd açıklamak için kullanılan W3C XML şema türlerini açıklar.SQL Server veri türü IÇIN XML ve HTTP /.

SqlTypes.xsd şeması belgesi

2004 XML şema ad alanı, aşağıdakileri içerecek şekilde genişletildi SQL Server veri türleri:SAAT, TARİH, datetime2, anddatetimeoffset.

.NET framework System.Data.SqlDbType

Aşağıdaki listeleme eklenir SqlDbTypeEnum.

SQL Server türü

.NET framework SqlDbType

date

Date

time

Time

datetime2

LargeDateTime

datetimeoffset

DateTimeWithTimeZone

Tamamlandı SqlDbTypeEnum aşağıdaki gibidir:

  <xsd:simpleType name="sqlDbTypeEnum">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="BigInt" /> 
      <xsd:enumeration value="Binary" /> 
      <xsd:enumeration value="Bit" /> 
      <xsd:enumeration value="Char" /> 
      <xsd:enumeration value="Date" />
      <xsd:enumeration value="DateTime" /> 
      <xsd:enumeration value="DateTimeWithTimeZone" />
      <xsd:enumeration value="Decimal" /> 
      <xsd:enumeration value="Float" /> 
      <xsd:enumeration value="Image" /> 
      <xsd:enumeration value="Int" /> 
      <xsd:enumeration value="LargeDateTime" />
      <xsd:enumeration value="Money" /> 
      <xsd:enumeration value="NChar" /> 
      <xsd:enumeration value="NText" /> 
      <xsd:enumeration value="NVarChar" /> 
      <xsd:enumeration value="Real" /> 
      <xsd:enumeration value="SmallDateTime" /> 
      <xsd:enumeration value="SmallInt" /> 
      <xsd:enumeration value="SmallMoney" /> 
      <xsd:enumeration value="Text" /> 
      <xsd:enumeration value="Time" />
      <xsd:enumeration value="Timestamp" /> 
      <xsd:enumeration value="TinyInt" /> 
      <xsd:enumeration value="Udt" /> 
      <xsd:enumeration value="UniqueIdentifier" /> 
      <xsd:enumeration value="VarBinary" /> 
      <xsd:enumeration value="VarChar" /> 
      <xsd:enumeration value="Variant" /> 
      <xsd:enumeration value="Xml" /> 
    </xsd:restriction>
  </xsd:simpleType>

Açıklama ve SQL Server tarih ve saat veri türlerini eşleştirme

Aşağıdaki tabloda, şema tanımlarının de yeni olan tarih ve saat veri türleri listelenmektedir. SQL Server 2008.

Veri türü

Şema tanımı

datetime

<xsd:simpleType name="datetime">
  <xsd:restriction base="xsd:dateTime">
....<xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-....9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-....9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-....9]{2}[037])?" /> 
    <xsd:maxInclusive value="9999-12-31T23:59:59.997" /> 
    <xsd:minInclusive value="1753-01-01T00:00:00.000" /> 
  </xsd:restriction>
</xsd:simpleType>

smalldatetime

<xsd:simpleType name="smalldatetime">
  <xsd:restriction base="xsd:dateTime">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9])(:00)" /> 
    <xsd:maxInclusive value="2079-06-06T23:59:00" /> 
    <xsd:minInclusive value="1900-01-01T00:00:00" /> 
  </xsd:restriction>
</xsd:simpleType>

date

<xsd:simpleType name="date">
  <xsd:restriction base="xsd:date">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))" /> 
    <xsd:maxInclusive value="9999-12-31" /> 
    <xsd:minInclusive value="0001-01-01" /> 
  </xsd:restriction>
</xsd:simpleType>

time

xsd:simpleType name="time">
  <xsd:restriction base="xsd:time">
    <xsd:pattern value="(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?" /> 
    <xsd:annotation>
    <xsd:minInclusive value="00:00:00" /> 
    </xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>

datetime2

<xsd:simpleType name="datetime2">
  <xsd:restriction base="xsd:dateTime">
    <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?" /> 
<xsd:annotation>
  <xsd:minInclusive value="0001-01-01T00:00:00" />
</xsd:annotation>
  </xsd:restriction>
</xsd:simpleType>

datetimeoffset

<xsd:simpleType name="DATETIMEOFFSET">
  <xsd:restriction base="xsd:dateTime" />
     <xsd:pattern value="((000[1-9])|(00[1-9][0-9])|(0[1-9][0-9]{2})|([1-9][0-9]{3}))-((0[1-9])|(1[012]))-((0[1-9])|([12][0-9])|(3[01]))T(([01][0-9])|(2[0-3]))(:[0-5][0-9]){2}(\.[0-9]+)?(([\+|\-]((0[0-9])|(1[0-2]))(:[0-5][0-9]))|(\+13(:[0-5][0-9])(:[0-5][0-9]))|\+14:00|Z)"(([\+|\-]((((0[0-9])|(1[0-3]))(:[0-5][0-9]))|14:00))|Z)" /> 
    <xsd:minInclusive value="0001-01-01T00:00:00Z" /> 
  </xsd:restriction>
</xsd:simpleType>

XML şema ad alanı sistem katalogları

Yeni bir tarih ve saat içinde varolan eklenen bilgi yazın 2004 XML şema ad alanı için doldurulur ve aşağıdaki XML şema belirli sistem kataloglarından sorgulanabilir:

  • Sys.xml_schemla_namespaces

  • Sys.xml_schema_collections

  • Sys.xml_schema_components

XML value() yöntem

XML value() yöntem belirtmek için bir yol sağlayan SQL Server Ayıklanan değer veri türü. Bu dönüştürme için XSD değerinden belirtir bir SQL Server Belirtilen tür değeri. The SQL Server tarih and saat types are supported for the following casts:

  • tarih gösteren bir XQuery değer örnek içine artığını bir date, datetime, smalldatetime, datetime2, datetimeoffset, veya herhangi türde karakter SQL Server.

  • Içine bir zamanı gösteren herhangi bir XQuery değer örnek atama time, datetime, smalldatetime, datetime2, datetimeoffset veya herhangi bir karakter türü SQL Server.

  • Bir tarih ile saati ve saat dilimini temsil eden bir XQuery değer örnek olarak atama datetime, smalldatetime, datetimeoffet (0 bölge uzaklık) ile date (iptal saat bölümü) time (iptal tarih bölümü) datetime2, veya herhangi bir karakter türü SQL Server.

  • Bir Z veya saat dilimi uzaklığı içeren süresine sahip olan bir tarihi gösteren bir XQuery değer örnek (+ |-ss: dd) içine atama datetime Bölge uzaklık olmadan (UTC), smalldatetime Bölge uzaklık olmadan (UTC), datetimeoffet, date (süre) bölümü ve bölge uzaklık kesildiğinde, datetime2 Bölge uzaklık olmadan (UTC), time (tarih bölümü ve bölge uzaklık çıkarılır) veya herhangi türde karakter SQL Server.

  • Dönüþtürme taşma veya aralık dışı bir duruma yol açar, bir hata iletisi döndürdü.

  • Tarih, saat veya tarih zaman değeri (olan veya olmayan bir saat dilimi) ile farklı bir hedef türü (kesirli saniye) daha fazla duyarlık, daha büyük kesirli saniye duyarlık yuvarlanır.

  • Tarih biçiminde gösteren herhangi bir örneğinin XML değeri bir date veri türü tarafından belirlenir küme DİLİ and küme dateformat ayarları.

Örnek

Aşağıdaki örnek value() yöntem.

DECLARE @myDoc xml;
DECLARE @OrderID int;
DECLARE @OrderDate date;
DECLARE @OrderTime time;
DECLARE @OrderDateTime datetimeoffset;
SET @myDoc = '<Root>
<OrderDescription OrderID="1" OrderDate="1999-12-20" OrderTime="13:40:58.47786" OrderDateTime="1999-12-20 13:40:58.123-05:00">
<Features>
  <Warranty>1 year parts and labor</Warranty>
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</OrderDescription>
</Root>';

SET @OrderID =  @myDoc.value('(/Root/OrderDescription/@OrderID)[1]', 'int');
SET @OrderDate =  @myDoc.value('(/Root/OrderDescription/@OrderDate)[1]', 'date');
SET @OrderTime =  @myDoc.value('(/Root/OrderDescription/@OrderTime)[1]', 'time');
SET @OrderDateTime =  @myDoc.value('(/Root/OrderDescription/@OrderDateTime)[1]', 'datetimeoffset');

SELECT @OrderID,@OrderDate,@OrderTime,@OrderDateTime;
--Returns: 1           1999-12-20 13:40:58.4778600 1999-12-20 13:40:58.1230000 -0

XQuery Pseudofunctions

sql:column() ve sql:variable() Tanı date, time, datetime2, ve datetimeoffset veri türleri.

SQL Server'a, XSD türü eşleştirmesi

Için sql:variable() ve sql:column(), gelen dönüştürülmüş Xquery değerinin Xquery temel tür SQL Server değer tarafından belirlenir SQL Server XSD türü eşleştirmesi için anlamsal. Bu eşleştirme anlambilim genişletilmiş XML şema ad alanında tanımlanır.

SQL Server türü

XSD türü

date

xsd:tarih

time

xsd:saat

datetime2

xsd:DateTime

datetimeoffset

xsd:DateTime

XML depolama biçimi türü eşleştirmesi

Içinde SQL Server 2008, yeni'yi kullanarak tarih ve saat türü değişiklikleri XML örnek için depolama biçimi SQL Server Tarih ve saat türü. Aşağıdaki tablo için XSD gösterir. SQL Server veri eşleme türü. Bu eşleştirme işlemi arasında iade sonuçlarını anlambilim da belirler sql:column() ve sql:variable() ve XML örnekleri tarih ve saat.

XSD türü

XML depolama TZ ile SQL Server türü eşleştirmesi

XML depolama SQL Server olmadan TZ türü eşleştirmesi

xs:date

datetimeoffset

date

xs:time

datetimeoffset

datetimeoffset

xs:dateTime

datetimeoffset

datetime2

XML ve XMLSCHEMA yan tümceleri için

SQL Server sütunları tarafından bildirilen date, time, datetime2, ve datetimeoffset veri türleri IÇIN XML veya XMLSCHEMA yan tümce SELECT deyiminde belirtilen desteklenmez.

Çıktı biçimi

Aşağıdaki tablo listeleri IÇIN XML biçimler için çıkış date, time, datetime2, ve datetimeoffset veri türleri.

SQL Server türü

Biçimi IÇIN XML çıktı

date

yyyy-AA-GG

time

hh:mm:ss[.nnnnnnn]

datetime2

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

datetimeoffset

YYYY-MM-DDThh:mm:ss[.nnnnnnn] [+|-]hh:mm

Örnek

Aşağıdaki örnek date, time, vedatetimeoffset türleriyle FOR XML.

CREATE TABLE T1 
    ( 
    dt date, tm time, dtz datetimeoffset
    );
GO
INSERT INTO T1 
VALUES('1996-12-16', '12:30:47.7867', '1996-12-16 12:30:47.7867-05:00');

SELECT dt FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 dt="1996-12-16"/>

SELECT tm FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 tm="12:30:47.7867"/>

SELECT dtz FROM T1 FOR XML AUTO;
--Returns:
--XML_F52E2B61-18A1-11d1-B105-00805F49916B
------------------------------------------
--<t1 dtz="1996-12-16T12:30:47.7867 -05:00"/>

XSD satır içi şema ile XMLSCHEMA yan tümce

XMLSCHEMA yan tümce IÇIN XML yan tümce ile uygulandığında oluşturulan XSD satır içi şema, her yeni bir tarih ve saat genişletilmiş varolan XML şema ad türleri için tanımlı desene kısıtlama yöntemleri izler.

OPENXML () işlev

OPENXML giriş biçimleri aşağıdaki tabloda listelenmiştir date, time, datetime2, ve datetimeoffset veri türleri.

SQL Server türü

Biçimi IÇIN XML çıktı

date

yyyy-AA-GG

time

hh:mm:ss[.nnnnnnn]

datetime2

YYYY-MM-DDThh:mm:ss[.nnnnnnn]

datetimeoffset

YYYY-MM-DDThh:mm:ss[.nnnnnnn][+|-]hh:mm

Örnek

Aşağıdaki örnek kullanır. OPENXML ile datetimeoffset Veri Türü.

CREATE TABLE T1 
    ( 
    dt date, tm time(7), dtz datetimeoffset(7)
    )
GO
DECLARE @docHandle int;
DECLARE @xmlDocument nvarchar(max); -- or xml type
SET @xmlDocument = N'<ROOT>
<T1 dt="2000-08-25" tm="12:30:47.1234567" dtz="2000-08-25T05:22:36.1234567-05:00"/>
</ROOT>';

EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument;

-- Use OPENXML to provide rowset that consists of customer data.
INSERT T1
SELECT * 
FROM OPENXML(@docHandle, N'/ROOT/T1') 
    WITH T1;

-- Using OPENXML in a SELECT statement
SELECT * FROM OPENXML(@docHandle, N'/ROOT/T1') WITH (dt date , tm time, dtz datetimeoffset);
EXEC sp_xml_removedocument @docHandle 

See Also

Concepts