Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describen las conversiones de fecha y hora realizadas entre una aplicación cliente escrita con SQL Server Native Client OLE DB y SQL Server 2008 (o posterior).
Conversiones
En este tema se describen las conversiones realizadas en el cliente. Si el cliente especifica la precisión de fracciones de segundos para un parámetro que difiere del definido en el servidor, la conversión del cliente podría provocar un error en los casos en los que el servidor permitiría que la operación se realizara correctamente. En concreto, el cliente trata cualquier truncamiento de fracciones de segundos como un error, mientras que SQL Server redondea los valores de tiempo al segundo entero más cercano.
Si no se llama a ICommandWithParameters::SetParameterInfo, DBTYPE_DBTIMESTAMP enlaces se convierten como si fueran datetime2.
| Para-> Desde |
DBDATE (fecha) | DBTIME (hora) | DBTIME2 (hora) | DBTIMESTAMP (smalldatetime) | DBTIMESTAMP (datetime) | DBTIMESTAMP (datetime2) | DBTIMESTAMPOFFSET (datetimeoffset) | STR | WSTR | SQLVARIANT (sql_variant) |
|---|---|---|---|---|---|---|---|---|---|---|
| FECHA | 1,2 | 1,3,4 | 4,12 | 1,12 | 1,12 | 1,12 | 1,5, 12 | 1,12 | 1,12 | 1,12 datetime2(0) |
| DBDATE | 1 | - | - | 1,6 | 1,6 | 1,6 | 1,5, 6 | 1,10 | 1,10 | 1 fecha |
| DBTIME | - | 1 | 1 | 1,7 | 1,7 | 1,7 | 1,5, 7 | 1,10 | 1,10 | 1 Time(0) |
| DBTIME2 | - | 1,3 | 1 | 1,7,10,14 | 1,7,10,15 | 1,7,10 | 1,5,7,10 | 1,10,11 | 1,10,11 | 1 Time(7) |
| DBTIMESTAMP | 1,2 | 1,3,4 | 1,4,10 | 1,10,14 | 1,10,15 | 1,10 | 1,5,10 | 1,10,11 | 1,10,11 | 1,10 datetime2(7) |
| DBTIMESTAMPOFFSET | 1,2,8 | 1,3,4,8 | 1,4,8,10 | 1,8,10,14 | 1,8,10,15 | 1,8,10 | 1,10 | 1,10,11 | 1,10,11 | 1,10 datetimeoffset(7) |
| FILETIME | 1,2 | 1,3,4 | 1,4,13 | 1,13 | 1,13 | 1,13 | 1,5,13 | 1,13 | 1,10 | 1,13 datetime2(3) |
| BYTES | - | - | - | - | - | - | - | No disponible | No disponible | No disponible |
| VARIANTE | 1 | 1 | 1 | 1,10 | 1,10 | 1,10 | 1,10 | No disponible | No disponible | 1,10 |
| SSVARIANT | 1,16 | 1,16 | 1,16 | 1,10,16 | 1,10,16 | 1,10,16 | 1,10,16 | No disponible | No disponible | 1,16 |
| BSTR | 1,9 | 1,9 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | No disponible | No disponible | No disponible |
| STR | 1,9 | 1,9 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | No disponible | No disponible | No disponible |
| WSTR | 1,9 | 1,9 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | 1,9,10 | No disponible | No disponible | No disponible |
Clave de los símbolos
| Símbolo | Significado |
|---|---|
| - | No se admite la conversión. Si el enlace se valida cuando se llama a IAccessor::CreateAccessor, se devuelve DBBINDSTATUS_UPSUPPORTEDCONVERSION en rgStatus. Cuando se aplaza la validación del descriptor de acceso, se establece DBSTATUS_E_BADACCESSOR. |
| No disponible | No aplicable. |
| 1 | Si los datos proporcionados no son válidos, se establece DBSTATUS_E_CANTCONVERTVALUE. Los datos de entrada se validan antes de que se apliquen las conversiones, por lo que incluso cuando un componente se omitirá mediante una conversión posterior, todavía debe ser válido para que la conversión se realice correctamente. |
| 2 | Los campos de hora se omiten. |
| 3 | Las fracciones de segundo deben ser cero o DBSTATUS_E_DATAOVERFLOW está establecida. |
| 4 | Se omite el componente de fecha. |
| 5 | La zona horaria se establece en la configuración de zona horaria del cliente. |
| 6 | La hora se establece en cero. |
| 7 | La fecha se establece en la fecha actual. |
| 8 | La hora se convierte en UTC. Si se produce un error durante esta conversión, se establece DBSTATUS_E_CANTCONVERTVALUE. |
| 9 | La cadena se analiza como literal ISO y se convierte en el tipo de destino. Si se produce un error, la cadena se analiza como un literal de fecha OLE (que también tiene componentes de hora) y se convierte de una fecha OLE (DBTYPE_DATE) al tipo de destino. Si el tipo de destino es DBTIMESTAMP, smalldatetime, datetimeo datetime2, la cadena debe ajustarse a la sintaxis de fecha, hora o datetime2 literales, o la sintaxis reconocida por OLE. Si la cadena es un literal de fecha, todos los componentes de hora se establecen en cero. Si la cadena es un literal de hora, la fecha se establece en la fecha actual.Para todos los demás tipos de destino, la cadena debe ajustarse a la sintaxis de los literales del tipo de destino. |
| 10 | Si se produce un truncamiento de fracciones de segundos con pérdida de datos, se establece DBSTATUS_E_DATAOVERFLOW. En el caso de las conversiones de cadenas, la comprobación de desbordamiento solo es posible cuando la cadena se ajusta a la sintaxis ISO. Si la cadena es un literal de fecha OLE, las fracciones de segundos se redondean. Para la conversión de DBTIMESTAMP (datetime) a smalldatetime SQL Server Native Client truncará silenciosamente el valor de segundos en lugar de generar el error de DBSTATUS_E_DATAOVERFLOW. |
| 11 | El número de dígitos fraccionarios de segundo (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 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. Sin embargo, si el tipo de origen es DBTIMESTAMP y las fracciones de segundos son cero, no se generan dígitos de segundo fraccionario ni separadores decimales. Este comportamiento garantiza la compatibilidad con versiones anteriores de las aplicaciones desarrolladas mediante proveedores OLE DB más antiguos. Un tamaño de columna de ~0 implica un tamaño ilimitado en OLE DB (9 dígitos, a menos que se aplique la regla de 3 dígitos para DBTIMESTAMP). DBTIME2 - 8, 10..18 (longitud en caracteres); 0, 1..9 (escala) DBTIMESTAMP - 19, 21..29 (longitud en caracteres); 0, 1..9 (escala) DBTIMESTAMPOFFSET - 26, 28..36 (longitud en caracteres); 0, 1..9 (escala) |
| 12 | Se mantiene la semántica de conversión anterior a SQL Server 2008 para DBTYPE_DATE. Las fracciones de segundos se truncan en cero. |
| 13 | Se mantiene la semántica de conversión anterior a SQL Server 2008 para DBTYPE_FILETIME. Si usa la API FileTimeToSystemTime de Windows, la precisión de fracciones de segundos se limita a 1 milisegundos. |
| 14 | Se mantiene la semántica de conversión anterior a SQL Server 2008.smalldatetime Los segundos se establecen en cero. |
| 15 | Se mantiene la semántica de conversión anterior a SQL Server 2008.datetime Los segundos se redondean a la 300ª más cercana de un segundo. |
| 16 | El comportamiento de conversión de un valor (de un tipo determinado) incrustado en una estructura de cliente SSVARIANT es el mismo que el comportamiento del mismo valor y tipo cuando no está incrustado en una estructura de cliente SSVARIANT. |