Applies ToSQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2012 Business Intelligence SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2012 Enterprise Core

Microsoft distribuye las soluciones Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) como un archivo que se puede descargar. Debido a que las correcciones son acumulativas, cada versión nueva contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de SQL Server 2008 R2 Service Pack 1 (SP1).

Síntomas

Imagine la siguiente situación:

  • Tiene una columna de tipo de datos DateTimeOffset en una tabla de Microsoft sql Server 2008 R2 o en Microsoft sql server 2012.

  • Se crea un índice en la columna DateTimeOffset .

  • El tipo de datos DateTimeOffset se convierte en un tipo de datos smalldatetime mediante la función Cast o Convert sin el argumento de estilo , o cuando el valor del argumento Style es 0.

  • El resultado de la función Cast o Convert se usa en un filtro de una consulta de Transact-SQL.

  • Ejecuta la consulta de Transact-SQL.

En este escenario, el resultado devuelto por la consulta es incorrecto porque el filtro no funciona correctamente. Por ejemplo, supongamos que la columna DateTimeOffset denominada "fecha" contiene los siguientes valores:

  • 2011-05-21 23:00:00 -01:00

  • 2011-05-21 23:00:00 +00:00

  • 2011-05-21 23:00:00 +01:00

Ejecute la consulta siguiente:

SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'

El resultado de la consulta devuelve una sola fila. Sin embargo, el resultado esperado debería devolver filas para los tres valores.

Resolución

Información sobre la actualización acumulativa

SQL Server 2012

La corrección para este problema se publicó por primera vez en la actualización acumulativa 3 para SQL Server 2012. Para obtener más información acerca de este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2723749 Paquete de actualización acumulativa 3 para SQL Server 2012Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2012. Microsoft recomienda que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2692828 Las compilaciones de SQL Server 2012 que se publicaron después de que se publicó SQL Server 2012 Debe aplicar una revisión de SQL Server 2012 a una instalación de SQL Server 2012.

Service Pack 2 de SQL Server 2008 R2

La corrección para este problema se publicó por primera vez en la actualización acumulativa 1 para SQL Server 2008 R2 Service Pack 2. Para obtener más información acerca de cómo obtener este paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2720425 Paquete de actualización acumulativa 1 para SQL Server 2008 R2 Service Pack 2Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2008 R2. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2730301 Las compilaciones de SQL Server 2008 R2 que se publicaron después de que se publicó SQL Server 2008 R2 Service Pack 2

SQL Server 2008 R2 SP1

La corrección para este problema se publicó por primera vez en la actualización acumulativa 7. Para obtener más información sobre cómo obtener este paquete de actualización acumulativa para SQL Server 2008 R2 Service Pack 1, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2703282 Paquete de actualización acumulativa 7 para SQL Server 2008 R2 SP1Nota Como las compilaciones son acumulativas, cada nueva versión de corrección contiene todas las revisiones y todas las revisiones de seguridad incluidas en la versión anterior de corrección de SQL Server 2008 R2 Service Pack 1. Le recomendamos que considere la posibilidad de aplicar la versión de corrección más reciente que contenga este Hotfix. Si desea obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2567616 Las compilaciones de SQL Server 2008 R2 que se publicaron después de que se publicó SQL Server 2008 R2 SP1

Más información

Para reproducir el problema, siga estos pasos:

  1. Ejecute la consulta siguiente para crear una tabla con una columna DateTimeOffset y para insertar algunos registros:CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO

  2. Ejecute la consulta siguiente y podrá ver que los tres valores se enumeran correctamente en el resultado devuelto:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. Ejecute la consulta siguiente para crear un índice en la columna "dto" y repetir la misma consulta:CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO

  4. Vuelva a ejecutar la consulta en el paso 2. Esta vez, la consulta solo devuelve una fila.

  5. Ejecute la consulta siguiente para eliminar el índice y la tabla que ha creado:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

Referencias

Para obtener más información sobre las funciones CAST y CONVERT, vaya al siguiente sitio web de MSDN:

Información general sobre las funciones CAST y CONVERT en SQL Server

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.