MCDBA Brasil


  • Home
  • Sobre
  • Contato

Livros





Links Rápidos

SQL Server Builds (All Versions/Editions)


Download SQL Server 2017 (trial)


SQL Server 2017 Feature Pack


SQL Server 2016 Feature Pack


Cumulative Update SQL Server 2017 builds


Cumulative Update SQL Server 2016 builds


Cumulative Update SQL Server 2014 builds


Cumulative Update SQL Server 2012 builds


SQL Server 2005/2008 Samples Databases


Documentando o Servidor SQL Server


Analisando a Performance do Servidor-CheckList


Virtual PASS PT


Faça parte do maior virtual chapter do PASS com conteúdos técnicos em Português sobre SQL Server.

Todos os meses um evento Online para você! Acompanhe aqui os WebCasts já agendados

Sindicalize seu blog ou site ao VirtualPASSPT

SQL Server Blogs

SQL Server Query Processing Team


SQL Programmability & API Development Team


SQL Server Manageability Team


Latin America Support Team


Database + Disk + Performance


Microsoft SQL Server Support


SQL CLR Team


SQL Query Optimization Team


SQL 2005 Code Samples


SQL Server Express Team


SQL SMO Samples


SQL Storage Engine Team


SQL CAT Team


SQL Protocols Team


PSS SQL Server Engineers


Slava Oks on SQLOS


Ken Henderson’s blog


LUTI@Microsoft Blog


kimberly L. Trip’s blog


Fernando Garcia Blog

Artigos

Problema com Datetime após aplicação de FIX no SQL 2000

por Nilton Pinheiro outubro 25, 2004 Nenhum comentário

O PROBLEMA:


Alguns dias após a aplicação do FIX 949 (8.00.949 = SP3 / SP3a + KB #843267) fui contatado por alguns analistas onde relatavam que suas queries estavam tendo um comportamento estranho. As queries utilizavam uma variável do tipo DateTime na cláusula WHERE, faziam comparação com uma coluna do tipo smalldatetime e não estavam retornando nenhum registro, embora existissem registros na tabela. A observação era de que o problema não ocorria até alguns dias atrás.


Foram realizados vários testes e concluímos que o problema estava relacionado ao FIX 949 pois quando executávamos as queries em um ambiente com o FIX 818 (8.00.818 = SP3 / SP3a + KB #826161) o problema NÂO OCORRIA.


A QUERY:


Para tentar identificar o problema em seus ambientes, vocês podem utilizar o script abaixo.


— Identifica o build do SQL instalado
— Ex: Microsoft SQL Server  2000 – 8.00.972 (Intel X86)
Select @@version


Set NoCount On
— Coloque aqui um banco para criar as duas tabelas abaixo
Use [SeuBanco]
go
— Cria uma tabela com os campos DateTime e smalldatetime
Create Table TBData (
 D_Small SmallDateTime,
 D_Date DateTime,
 Nome varchar(15)
)


— Cria uma tabela com o campo smalldatetime
Create Table TBNOME (
 Nome Varchar(15),
 D_Small smalldatetime
)


— Inseri registros na tabela
Insert Into TBData Values (‘2004-10-21′,’2004-10-21′,’AAA’)
Insert Into TBData Values (‘2004-10-21′,’2004-10-21′,’BBB’)
Insert Into TBData Values (‘2004-10-21′,’2004-10-21′,’CCC’)
Insert Into TBData Values (‘2004-10-21′,’2004-10-21′,’DDD’)


— Inseri registros na tabela
Insert Into TBNOME Values (‘AAA’,’2004-10-21′)
Insert Into TBNOME Values (‘BBB’,’2004-10-21′)
Insert Into TBNOME Values (‘CCC’,’2004-10-21′)
Insert Into TBNOME Values (‘DDD’,’2004-10-21′)


O problema está no SELECT abaixo!! Foi criada uma variável do tipo datetime e na cláusula WHERE está se fazendo um filtro em um campo smalldatetime usando-se uma variável do tipo datetime.


Print ‘Select COM variavel DATETIME’
Declare @D_Date datetime
Set @D_Date = ‘2004-10-21’


Select a.d_small, b.nome
from TBData a join TBNOME b
 On a.D_Small = b.D_Small
Where a.D_Small = @D_Date  —>>>> O Problema está aquí
 
GO


Resultado:


Select COM variavel DATETIME
d_small                        nome           
————————— —————


(0 row(s) affected)


No SELECT abaixo a comparação está sendo feita com uma variável do tipo smalldatetime. Esta query retorna os resultados esperados.

Print ‘Select COM variavel SMALLDATETIME’
Declare @D_Date smalldatetime
Set @D_Date = ‘2004-10-21’


Select a.d_small, b.nome
from TBData a join TBNOME b
 On a.D_Small = b.D_Small
Where a.D_Small = @D_Date


Resultado:


Select COM variavel SMALLDATETIME
d_small                         nome           
———————–        —————
2004-10-21 00:00:00     AAA
2004-10-21 00:00:00     AAA
2004-10-21 00:00:00     AAA
2004-10-21 00:00:00     AAA
2004-10-21 00:00:00     BBB
2004-10-21 00:00:00     BBB
2004-10-21 00:00:00     BBB
2004-10-21 00:00:00     BBB
2004-10-21 00:00:00     CCC
2004-10-21 00:00:00     CCC
2004-10-21 00:00:00     CCC
2004-10-21 00:00:00     CCC
2004-10-21 00:00:00     DDD
2004-10-21 00:00:00     DDD
2004-10-21 00:00:00     DDD
2004-10-21 00:00:00     DDD


(16 row(s) affected)


Obs: O problema só ocorre quando se faz JOINs entre tabelas!!


Em testes, descobrimos que no build 818 o resultado esperado é obtido, mas nos build 949 (8.00.949 = SP3 / SP3a + KB #843267), 967 e 972 (8.00.972 = SP3 / SP3a + KB #885290)   o primeiro SELECT retorna 0 (zero) registros.


O ESPERADO É QUE AMBOS AS QUERIES RETORNEM A MESMA QUANTIDADE DE REGISTROS (16 reg).



A SOLUÇÃO


Como pudemos observar no segundo SELECT, para solucionar o problema basta você declarar a variável com o tipo smalldatetime.



O BUG:


Em chamado aberto com o suporte da Microsoft, o problema foi reproduzido e estará sendo registrado como um BUG. Sendo assim, ainda não existe nehuma documentação (KB) a respeito do problema.


A observação aqui é que se você possui alguma query que se enquadre no exemplo acima, verifique se a mesma está retornando o resultado esperado.


Caso você esteja tendo este mesmo problema em instalações do SQL Server com Builds diferentes dos citados acima ou tenha alguma dúvida, abra um tópico no fórum (com o mesmo nome deste artigo) para que possamos discutir o problema e quem sabe, identificar a partir de qual Build o problema passou a ocorrer.


Um abraço a todos


Nilton Pinheiro


 

Avaliação:
Compartilhe:
  • Anterior Desenvolvendo aplicações .NET para SQL Server21 anos atrás
  • Próximo Melhorando a Performace das Queries21 anos atrás

Deixe uma resposta Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

MVP Reconnect Award

Categorias

  • Artigos (359)
  • Dica da Semana (95)
  • Documentação (54)
  • Downloads (113)
  • MSDE 2000 (3)
  • Sem categoria (1)
  • Tutoriais (9)

Posts recentes

  • #FechouBrasil #PartiuPortugal
  • Brigando com o erro “The cached MSI file is missing”
  • MCDBABRASIL está de volta
  • Documentando o Servidor SQL Server
  • Brigando com os Erros 17182, 17826 e 17120

SQL Server AlwaysOn Video Series

Video1: Introdução ao SQLServer2012 AlwaysOn


Video2: Introdução ao SQLServer2012 AlwaysOn Availability Group


Video3: Introdução ao SQLServer2012 AlwaysOn AVG-Demo


Video4: Introdução ao SQLServer2012 AlwaysOn Listener


Video5: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries


Video6: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries-Demo


Video7: Introdução ao SQLServer2012 AlwaysOn Failover Clustering


Serie SQL Server Failover Clustering End-to-End

Parte 1: Configuração da Rede e Ambiente


Parte 2: Configurando o Windows 2008 R2 Domain Controler e DNS


Parte 3: Preparando os nós para o Failover Cluster


Parte 4: Configurando um Failover Cluster de 2 nós


Parte 5: Configurando as LUNs no iSCSI Software Target (Parte 1)


Parte 6: Configurando as LUNs no iSCSI Software Target (Parte 2)


Parte 7: Apresentando as LUNs para os nós do Failover Cluster


Parte 8: Configurando os discos no Failover Cluster


Parte 9: Instalando a primeira instância virtual do SQL Server 2008


Parte 10: Instalando a segunda instância virtual do SQL Server 2008


Parte 11: Instalando e Configurando o MSDTC no Failover Cluster


Parte 12: Configurando Mount Points no Cluster e SQL Server 2008


Vídeo Extra: Removendo uma Instância do SQL Server 2008 R2 em Cluster


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering Overview


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering na Prática

Menu

  • Home
  • Sobre
  • Contato

Mais

  • RSS Feeds
2026 MCDBA Brasil.