A Microsoft distribui o Microsoft SQL Server 2005 ou o Microsoft SQL Server 2008 ou o SQL 2008 R2 corre correções como um arquivo que pode ser baixado. Como as correções são cumulativas, cada nova versão contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do Microsoft SQL Server 2005 ou do Microsoft SQL Server 2008 ou do SQL 2008 R2. correção

Sintomas

Suponha que você execute uma consulta em uma instância do Microsoft SQL Server 2005 ou Microsoft SQL Server 2008 ou Microsoft SQL Server 2008 R2 que atenda às seguintes condições:

  • A consulta contém um operador relacional. Por exemplo, o operador menor que (<).

  • Há uma função DateDiff no operando do operador relacional.

Nessa situação, o SQL Server pode selecionar um plano de consulta subideal para executar essa consulta. Portanto, a consulta pode ser executada lentamente.

Causa

Esse problema ocorre porque o otimizador do SQL Server prevê o número de linhas que serão retornadas quando você usar a função DateDiff .

Resolução

Informações sobre a atualização cumulativa

Service Pack 3 do SQL Server 2005

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 15 para SQL Server 2005 Service Pack 3. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2507766 Pacote de atualizações cumulativas 15 para SQL Server 2005 Service Pack 3Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2005 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

960598 As compilações do SQL Server 2005 lançadas após o lançamento do SQL Server 2005 Service Pack 3 Hotfixes do Microsoft SQL Server 2005 são criados para Service Packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 3 a uma instalação do SQL Server 2005 Service Pack 3. Por padrão, qualquer hotfix fornecido em um Service Pack do SQL Server está incluído no próximo Service Pack do SQL Server.

Service Pack 4 do SQL Server 2005

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 2 para SQL Server 2005 Service Pack 4. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2489409 Pacote de atualizações cumulativas 2 para SQL Server 2005 Service Pack 4Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2005 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2485757 As compilações do SQL Server 2005 lançadas após o lançamento do SQL Server 2005 Service Pack 4 Hotfixes do Microsoft SQL Server 2005 são criados para Service Packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2005 Service Pack 4 a uma instalação do SQL Server 2005 Service Pack 4. Por padrão, qualquer hotfix fornecido em um Service Pack do SQL Server está incluído no próximo Service Pack do SQL Server.

Service Pack 1 do SQL Server 2008

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 13 para SQL Server 2008 Service Pack 1. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2497673 Pacote de atualizações cumulativas 13 para SQL Server 2008 Service Pack 1Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

970365 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 1 Hotfixes do Microsoft SQL Server 2008 são criados para Service Packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 1 a uma instalação do SQL Server 2008 Service Pack 1. Por padrão, qualquer hotfix fornecido em um Service Pack do SQL Server está incluído no próximo Service Pack do SQL Server.

Service Pack 2 do SQL Server 2008

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 3 para SQL Server 2008 Service Pack 2. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2498535 Pacote de atualizações cumulativas 3 para SQL Server 2008 Service Pack 2Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2402659 As compilações do SQL Server 2008 lançadas após o lançamento do SQL Server 2008 Service Pack 2 Hotfixes do Microsoft SQL Server 2008 são criados para Service Packs específicos do SQL Server. Você deve aplicar um hotfix do SQL Server 2008 Service Pack 2 a uma instalação do SQL Server 2008 Service Pack 2. Por padrão, qualquer hotfix fornecido em um Service Pack do SQL Server está incluído no próximo Service Pack do SQL Server.

SQL Server 2008 R2 Service Pack 1

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 1 para SQL Server 2008 R2 Service Pack 1. Para obter mais informações sobre como obter esse pacote de atualização cumulativa, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2544793 Pacote de atualização cumulativa 1 para SQL Server 2008 R2 Service Pack 1Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 R2. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2567616 As compilações do SQL Server 2008 R2 que foram lançadas após o lançamento do SQL Server 2008 R2 Service Pack 1

SQL Server 2008 R2

A correção para esse 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 do SQL Server 2008 R2, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2507770 Pacote de atualizações cumulativas 7 para SQL Server 2008 R2 Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2008 R2. Recomendamos que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

981356 As compilações do SQL Server 2008 R2 que foram lançadas após a liberação do SQL Server 2008 R2

Status

A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Solução alternativa

Para solucionar esse problema, reescreva a consulta de modo que o plano de consulta não use a função DateDiff em predicados. Por exemplo, os seguintes itens podem ser executados lentamente:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) No entanto, você pode reescrever a consulta como a seguir para solucionar o problema:create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Referências

Para obter mais informações sobre o modelo de manutenção incremental do SQL Server, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

935897 Um modelo de serviço incremental está disponível na equipe do SQL Server para fornecer hotfixes para problemas relatadosPara obter mais informações sobre o esquema de nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

822499 Novo esquema de nomeação para pacotes de atualização de software do Microsoft SQL ServerPara obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

824684 Descrição da terminologia padrão utilizada para descrever as atualizações de software da Microsoft

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×