Compartir a través de


Cambios de copia masiva para tipos de fecha y hora mejorados (OLE DB y ODBC)

En este tema se describen las mejoras de fecha y hora efectuadas para admitir la funcionalidad de copia masiva. La información de este tema es válida para OLE DB y ODBC en SQL Server Native Client.

Archivos de formato

En la tabla siguiente se describe la entrada que se usa para especificar los tipos de fecha y hora, así como los nombres de tipo de datos de archivo host correspondientes, a la hora de generar archivos de formato de forma interactiva.

Tipo de almacenamiento en archivo

Tipo de datos del archivo host

Respuesta al mensaje "Especifique el tipo del campo de almacenamiento de archivo <nombre_de_campo> [<predeterminado>]:"

Datetime

SQLDATETIME

d

Smalldatetime

SQLDATETIM4

D

Date

SQLDATE

de

Time

SQLTIME

te

Datetime2

SQLDATETIME2

d2

Datetimeoffset

SQLDATETIMEOFFSET

do

El archivo XSD con formato XML tendrá las siguientes adiciones:

    <xs:complexType name="SQLDATETIME2">
        <xs:complexContent>
            <xs:extension base="bl:Fixed"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="SQLDATETIMEOFFSET">
        <xs:complexContent>
            <xs:extension base="bl:Fixed"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="SQLDATE">
        <xs:complexContent>
            <xs:extension base="bl:Fixed"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="SQLTIME">
        <xs:complexContent>
            <xs:extension base="bl:Fixed"/>
        </xs:complexContent>
    </xs:complexType>

Archivos de datos de caracteres

En archivos de datos de caracteres, los valores de fecha y de hora se representan tal y como se describe en la sección "Formatos de datos: Cadenas y literales" de Compatibilidad con tipos de datos para mejoras de fecha y hora de ODBC para ODBC o de Compatibilidad con tipos de datos para mejoras de fecha y hora de OLE DB para OLE DB.

En archivos de datos nativos, los valores de fecha y hora para los cuatro nuevos tipos se representan como sus representaciones TDS con una escala de 7 (dado que se trata del máximo admitido por SQL Server y los archivos de datos bcp no almacenan la escala de estas columnas). No se ha efectuado ningún cambio en el almacenamiento de los tipos datetime y smalldatetime existentes, ni en sus representaciones de flujo TDS.

Los tamaños de almacenamiento para los distintos tipos de almacenamiento son los siguientes para OLE DB:

Tipo de almacenamiento en archivo

Tamaño de almacenamiento en bytes

datetime

8

smalldatetime

4

date

3

time

6

datetime2

9

datetimeoffset

11

Las tamaños de ODBC son los siguientes. Tenga en cuenta que no es necesario almacenar la precisión en archivos de datos o de formato porque BCP.exe siempre recuperará la precisión del servidor.

Tipo de almacenamiento en archivo

Tamaño de almacenamiento en bytes

Formato de almacenamiento

datetime (d)

8

TDS

smalldatetime (D)

4

TDS

date (de)

3

TDS

time (te)

6

TDS

datetime2 (d2)

9

TDS

datetimeoffset (do)

11

TDS

Tipos BCP en sqlncli.h

Los tipos siguientes se definen en sqlncli.h para usarse con las extensiones API de BCP en ODBC. Estos tipos se pasan con el parámetro eUserDataType de IBCPSession::BCPColFmt en OLE DB.

Tipo de almacenamiento en archivo

Tipo de datos del archivo host

Tipo de sqlncli.h para usarlo con IBCPSession::BCPColFmt

Valor

Datetime

SQLDATETIME

BCP_TYPE_SQLDATETIME

0x3d

Smalldatetime

SQLDATETIM4

BCP_TYPE_SQLDATETIME4

0x3a

Date

SQLDATE

BCP_TYPE_SQLDATE

0x28

Time

SQLTIME

BCP_TYPE_SQLTIME

0x29

Datetime2

SQLDATETIME2

BCP_TYPE_SQLDATETIME2

0x2a

Datetimeoffset

SQLDATETIMEOFFSET

BCP_TYPE_SQLDATETIMEOFFSET

0x2b

Conversiones de tipos de datos BCP

En las tablas siguientes se proporciona información de conversión.

Nota de OLE DB   Las conversiones siguientes se realizan con IBCPSession. IRowsetFastLoad usa las conversiones OLE DB definidas en Conversiones realizadas de cliente a servidor. Tenga en cuenta que los valores datetime se redondean a la fracción 1/300 de segundo y los valores smalldatetime tienen los segundos establecidos en cero después de que se hayan realizado las conversiones de cliente que se describen a continuación. El redondeo de datetime se propaga a las horas y minutos, pero no a la fecha.

           A -->

De

date

time

smalldatetime

datetime

datetime2

datetimeoffset

char

wchar

Date

1

-

1,6

1,6

1,6

1,5,6

1,3

1,3

Time

N/D

1,10

1,7,10

1,7,10

1,7,10

1,5,7,10

1,3

1,3

Smalldatetime

1,2

1,4,10

1

1

1,10

1,5,10

1,11

1,11

Datetime

1,2

1,4,10

1,12

1

1,10

1,5,10

1,11

1,11

Datetime2

1,2

1,4,10

1,10 (ODBC)1,12 (OLE DB)

1,10

1,10

1,5,10

1,3

1,3

Datetimeoffset

1,2,8

1,4,8,10

1,8,10

1,8,10

1,8,10

1,10

1,3

1,3

Char/wchar (date)

9

-

9,6 (ODBC)9,6,12 (OLE DB)

9,6 (ODBC)9,6,12 (OLE DB)

9,6

9,5,6

N/D

N/D

Char/wchar (time)

-

9,10

9,7,10 (ODBC)9,7,10,12 (OLE DB)

9,7,10 (ODBC)9,7,10, 12 (OLE DB)

9,7,10

9,5,7,10

N/D

N/D

Char/wchar (datetime)

9,2

9,4,10

9,10 (ODBC)9,10,12 (OLE DB)

9,10 (ODBC)9,10,12 (OLE DB)

9,10

9,5,10

N/D

N/D

Char/wchar (datetimeoffset)

9,2,8

9,4,8,10

9,8,10 (ODBC)9,8,10,12 (OLE DB)

9,8,10 (ODBC)9,8,10,12 (OLE DB)

9,8,10

9,10

N/D

N/D

Clave de los símbolos

Símbolo

Significado

-

No se admite la conversión.

Se genera un registro de diagnóstico ODBC con SQLSTATE 07006 y el mensaje "Infracción del atributo de tipo de datos restringido".

1

Si los datos proporcionados no son válidos, se genera un registro de diagnóstico ODBC con SQLSTATE 22007 y el mensaje "Formato de fecha y hora no válido". Para los valores datetimeoffset, el espacio de tiempo debe estar comprendido dentro del intervalo después de la conversión a UTC, aunque no se haya solicitado ninguna conversión a UTC. Esto se debe a que la secuencia de datos tabulares (TDS) y el servidor siempre normalizan el tiempo en valores datetimeoffset para UTC. Por lo tanto, el cliente debe comprobar que los componentes de tiempo se encuentran dentro del intervalo admitido después de la conversión a UTC.

2

Se omite el componente de hora.

3

Para ODBC, si produce un truncamiento con pérdida de datos, se genera un registro de diagnóstico con SQLSTATE 22001 y el mensaje "Cadena truncada por la derecha". El número de dígitos de las fracciones de segundos (la escala) se determina a partir del tamaño de la columna de destino, según la tabla siguiente. Si el tamaño de las columnas es mayor que el intervalo de la tabla, se presupone una escala de 7. Esta conversión debería permitir hasta nueve dígitos en las fracciones de segundo, que es el máximo permitido por ODBC.

Tipo

Escala implícita

0

Escala implícita

1..7

DBTIME2

8

10,16

DBTIMESTAMP

19

21..27

DBTIMESTAMPOFFSET

26

28..34

Para OLE DB, si se produce un truncamiento con pérdida de datos, se expone un error. Para datetime2, el número de dígitos de las fracciones de segundo (la escala) se determina en función del tamaño de la columna de destino, según la tabla siguiente. Si el tamaño de la columna es mayor que el intervalo de la tabla, se presupone una escala de 9. Esta conversión debería permitir hasta nueve dígitos en las fracciones de segundo, que es el máximo permitido por OLE DB.

Tipo

Escala implícita

0

Escala implícita

1..9

DBTIME2

8

1..9

DBTIMESTAMP

19

21..29

DBTIMESTAMPOFFSET

26

28..36

4

Se omite el componente de fecha.

5

Timezone se establece en UTC (por ejemplo, 00:00).

6

La hora se establece en cero.

7

La fecha se establece en 1900-01-01.

8

Se omite el desplazamiento de zona horaria.

9

La cadena se analiza y se convierte en un valor date, datetime, datetimeoffset o time, en función del primer carácter de puntuación encontrado y de la presencia de otros componentes. A continuación, la cadena se convierte en el tipo de destino, siguiendo las reglas de la tabla del final de este tema para el tipo de origen detectado por este proceso. Si los datos proporcionados no pueden analizarse sin errores, o si cualquier parte de componente se encuentra fuera del intervalo permitido, o si no hay ninguna conversión del tipo literal al tipo de destino, se expone un error (OLE DB) o se genera un registro de diagnóstico ODBC con SQLSTATE 22018 y el mensaje "Valor de carácter no válido para especificación cast". Para los parámetros datetime y smalldatetime, si el año se encuentra fuera del intervalo que estos tipos admiten, se expone un error (OLE DB) o un registro de diagnóstico ODBC con SQLSATE 22007 y el mensaje "Formato de fecha y hora no válido".

Para datetimeoffset, el valor debe estar comprendido dentro del intervalo después de la conversión a UTC, aunque no se haya solicitado ninguna conversión a UTC. Esto se debe a que la secuencia de datos tabulares (TDS) y el servidor siempre normalizan la hora en valores datetimeoffset para UTC, de modo que el cliente tenga que comprobar que los componentes de hora están dentro del intervalo admitido después de la conversión a UTC. Si el valor no se encuentra dentro del intervalo UTC compatible, se expone un error (OLE DB) o se genera un registro de diagnóstico ODBC con SQLSTATE 22007 y el mensaje "Formato de fecha y hora no válido".

10

Si se produce un truncamiento con pérdida de datos en una conversión de cliente a servidor, se expone un error (OLE DB) o se genera un registro de diagnóstico ODBC con SQLSTATE 22008 y el mensaje "Desbordamiento del campo DateTime". Este error también se produce si el valor está fuera del intervalo que puede representarse mediante el intervalo UTC utilizado por el servidor. Si se produce un truncamiento de segundos o fracciones de segundo en una conversión de servidor a cliente, solo se emite una advertencia.

11

Si se produce un truncamiento con pérdida de datos, se genera un registro de diagnóstico.

En una conversión de servidor a cliente, es una advertencia (ODBC SQLSTATE S1000).

En una conversión de cliente a servidor, es un error (ODBC SQLSTATE 22001).

12

Los segundos se establecen en cero y las fracciones de segundo se descartan. No es posible ningún error de truncamiento.

N/D

Se mantiene el comportamiento de las versiones actuales y anteriores de SQL Server 2005.

Vea también

Conceptos

Mejoras en los tipos de datos de fecha y hora (ODBC)

Mejoras de fecha y hora (OLE DB)