Aplica-se A
SQL 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

A Microsoft distribui as correções do Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) como um ficheiro transferível. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção do SqL Server 2008 R2 Service Pack 1 (SP1).

Sintomas

Considere o seguinte cenário:

  • Tem uma coluna do tipo datatimeoffset de dados numa tabela no Microsoft SQL Server 2008 R2 ou no Microsoft SQL Server 2012.

  • Cria-se um índice na coluna datatimeoffset.

  • Converter o tipo de dados de datatimeoff para um tipo de dados de data de pequena data utilizando a função CAST ou CONVERT sem o argumento de estilo, ou quando o valor do argumento de estilo é 0.

  • O resultado da função CAST ou CONVERT é utilizado num filtro numa consulta Transact-SQL.

  • Você dirige a consulta Transact-SQL.

Neste cenário, o resultado devolvido pela consulta é incorreto porque o filtro não funciona corretamente. Por exemplo, assuma que a coluna datatimeoffset que é denominada "Data" contém os seguintes 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

Execute a seguinte consulta:

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

O resultado da consulta retorna apenas uma linha. No entanto, o resultado esperado deverá voltar a ser o resultado dos três valores.

Resolução

Informação de atualização cumulativa

SQL Server 2012

A correção para este problema foi lançada pela primeira vez na Cumulativa Update 3 para SQL Server 2012. Para obter mais informações sobre este pacote de atualização cumulativa, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:

2723749 Pacote de atualização cumulativo 3 para SQL Server 2012Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção SQL Server 2012. A Microsoft recomenda que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2692828 O SQL Server 2012 constrói que foram lançados após o lançamento do SQL Server 2012 Deve aplicar um hotfix SQL Server 2012 a uma instalação do SQL Server 2012.

Sql Server 2008 R2 Service Pack 2

A correção para este problema foi lançada pela primeira vez na Cumulativa Update 1 para SQL Server 2008 R2 Service Pack 2. Para obter mais informações sobre como obter este pacote de atualização cumulativa, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:

2720425 Pacote de atualização cumulativo 1 para SQL Server 2008 R2 Service Pack 2Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção R2008 do SQL Server 2008. Recomendamos que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2730301 O SQL Server 2008 R2 constrói que foram lançados após o lançamento do SQL Server 2008 R2 Service Pack 2

SQL Server 2008 R2 SP1

A correção para este problema foi lançada pela primeira vez na Atualização Cumulativa 7. Para obter mais informações sobre como obter este pacote de atualização cumulativa para o SQL Server 2008 R2 Service Pack 1, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:

2703282 Pacote de atualização cumulativo 7 para SQL Server 2008 R2 SP1Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção do SqL Server 2008 R2 Service Pack 1. Recomendamos que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2567616 O SQL Server 2008 R2 constrói que foram lançados após o lançamento do SQL Server 2008 R2 SP1

Mais Informações

Para reproduzir a questão, siga estes passos:

  1. Executar a seguinte consulta de modo a criar uma tabela com uma coluna de datatimeoffset e inserir alguns registos: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. Faça a seguinte consulta e poderá ver que os três valores estão corretamente listados no resultado devolvido:DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. Executar a seguinte consulta de modo a criar um índice na coluna "dto" e repetir a mesma 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. Executar a consulta no passo 2 novamente. Desta vez, a consulta retorna apenas uma linha.

  5. Faça a seguinte consulta para eliminar o índice e a tabela que criou:DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

Referências

Para obter mais informações sobre as funções CAST e CONVERT, aceda ao seguinte website da MSDN:

Informações gerais sobre as funções CAST e CONVERT no SQL Server

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.