CORRECÇÃO: Consulta que associa duas tabelas nas colunas de tipo de dados smalldatetime, pode produzir resultados incorrectos no SQL Server 2000

Traduções de Artigos Traduções de Artigos
Artigo: 888998 - Ver produtos para os quais este artigo se aplica.
N.º de bugs: 473085 (SQL Server 8.0)

Expandir tudo | Reduzir tudo

Nesta página

Conteúdo do artigo

Sumário

Este artigo descreve o seguinte sobre esta versão de correcção:
  • Problemas corrigidos por este pacote de correcções
  • Pré-requisitos para instalar o pacote de correcções
  • Se tem de reiniciar o computador depois de instalar o pacote de correcções
  • Se o pacote de correcções é substituído por qualquer outro pacote de correcção
  • Se terá de efectuar quaisquer alterações de registo
  • Ficheiros contidos no pacote de correcção

Sintomas

No Microsoft SQL Server 2000 com correcção compilação 8.00.0837 ou uma versão posterior, poderá executar uma consulta que associa duas tabelas, utilizando um equijoin uma coluna de tipo de dados smalldatetime . Um equijoin é uma associação em que linhas de duas tabelas são combinadas e adicionadas ao resultado definido quando existem valores iguais nas colunas associadas. Se uma condição de filtro com um literal estiver destas colunas, a consulta poderá devolver resultados incorrectos. A consulta seguinte é um exemplo de uma consulta afectado:
declare @Date datetime
set @Date = '2005-01-01'

Select t1.c1, t2.c2 
from 
t1 Join t2 on t1.smalldatetime_column = t2.smalldatetime_column
Where t1.smalldatetime_column = @Date
para obter uma lista de todas as publicamente disponibilizadas SQL Server 2000 Post-Service Pack 3a correcções, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
810185Actualização de correcção do SQL Server 2000 para o SQL Server 2000 Service Pack 3 e 3a

Causa

Este problema ocorre porque a correcção do SQL Server 2000 criar 8.00.0837 optimiza as consultas para incluir um valor de predicado implícito sempre que possível. Uma vez que o parâmetro implícito utiliza incorrectamente uma constante de 4 bytes smalldatetime em vez da constante de data/hora 8 bytes, incorrecta avaliação da comparação ocorre em tempo de execução.

Resolução

Informações sobre a correcção

Está disponível a partir da Microsoft uma correcção suportada. No entanto, esta correcção destina-se a corrigir o problema descrito neste artigo. Aplique esta correcção apenas em sistemas que tenham este problema específico.

Se a correcção está disponível para transferência, existe uma secção "denominada transferência de correcção disponível" na parte superior deste artigo da base de dados de conhecimento. Se esta secção não for apresentada, submeta um pedido para o serviço de cliente do Microsoft e suporte para obter a correcção.

Nota Se ocorram problemas adicionais ou se for necessária qualquer resolução de problemas, poderá ter de criar um pedido de assistência separado. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem esta correcção específica. Para obter uma lista completa dos números de telefone do suporte de cliente do Microsoft ou para criar um pedido serviço separado, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota O formulário "Transferência de correcção disponível" apresenta os idiomas para a qual a correcção está disponível. Se não vir o idioma, é porque uma correcção não está disponível para esse idioma.

Pré-requisitos

Tem de instalar o SQL Server 2000 Service Pack 3. Para obter mais informações sobre como obter o SQL Server 2000 Service Pack 3, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
290211Como obter o SQL Server 2000 service pack mais recente
Além disso, esta correcção requer que também tenha SQL Server 2000 hotfix compilação 2000.80.977 instalado. Para obter mais informações sobre SQL Server 2000 SP3a registar correcção criar 2000.80.977, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft:
888007Recebe uma mensagem de erro "O produto não possui uma actualização de pré-requisito instalada" quando tenta instalar uma correcção do SQL Server 2000 posteriores ao Pack 3

Informações sobre reinício

Tem de reiniciar o serviço SQL Server depois de aplicar esta correcção.

Informações sobre ficheiros da correcção

Esta correcção contém apenas os ficheiros necessários para corrigir os problemas referidos neste artigo. Esta correcção poderá não conter todos os ficheiros que necessita para actualizar completamente um produto para a compilação mais recente.

A versão inglesa desta correcção tem os atributos de ficheiro (ou atributos de ficheiro posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   Date         Time   Version        Size       File name
   ----------------------------------------------------------
   02-Nov-2004  06:02  2000.80.985.0    664,128  Autoplt.dll
   02-Nov-2004  06:02  2000.80.985.0     78,400  Console.exe      
   02-Nov-2004  06:02  2000.80.985.0    332,352  Ctasksui.dll
   02-Nov-2004  06:02  2000.80.985.0    315,968  Custtask.dll
   02-Nov-2004  06:02  2000.80.985.0     33,340  Dbmslpcn.dll
   02-Nov-2004  06:02  2000.80.985.0  1,905,216  Dtspkg.dll       
   02-Nov-2004  06:02  2000.80.985.0    528,960  Dtspump.dll
   02-Nov-2004  06:02  2000.80.985.0     41,536  Dtsrun.exe
   02-Nov-2004  06:02  2000.80.985.0  1,557,052  Dtsui.dll
   02-Nov-2004  06:02  2000.80.985.0    639,552  Dtswiz.dll       
   02-Nov-2004  06:02  2000.80.985.0    352,828  Isqlw.exe        
   02-Nov-2004  06:02  2000.80.985.0     82,492  Itwiz.exe        
   02-Nov-2004  06:02  2000.80.985.0     90,692  Msgprox.dll      
   19-May-2004  23:43  8.11.40209.0     209,408  Mssdi98.dll      
   02-Nov-2004  06:02  2000.80.985.0     62,024  Odsole70.dll     
   02-Nov-2004  06:03  2000.80.985.0     25,144  Opends60.dll     
   02-Nov-2004  05:35                    17,576  Opends60.lib
   02-Nov-2004  06:02  2000.80.985.0     57,904  Osql.exe
   02-Nov-2004  06:02  2000.80.985.0    279,104  Pfutil80.dll     
   02-Nov-2004  06:02  2000.80.985.0    143,940  Qrdrsvc.exe      
   02-Nov-2004  06:02  2000.80.985.0    221,768  Replprov.dll     
   02-Nov-2004  06:03  2000.80.985.0    307,784  Replrec.dll      
   02-Nov-2004  06:03  2000.80.985.0    287,304  Rinitcom.dll     
   02-Nov-2004  06:03  2000.80.985.0     78,416  Sdiclnt.dll      
   02-Nov-2004  06:03  2000.80.985.0     66,112  Semmap.dll       
   02-Nov-2004  06:03  2000.80.985.0     57,916  Semnt.dll
   02-Nov-2004  06:03  2000.80.985.0    492,096  Semobj.dll
   02-Nov-2004  06:02  2000.80.985.0     53,832  Snapshot.exe
   02-Nov-2004  06:01  2000.80.985.0     28,672  Sqlagent.dll
   02-Nov-2004  06:02  2000.80.985.0    311,872  Sqlagent.exe
   02-Nov-2004  06:01  2000.80.985.0    168,001  Sqlakw32.dll
   02-Nov-2004  05:05                     4,352  Sqlakw32.lib
   02-Nov-2004  06:03  2000.80.985.0     33,344  Sqlctr80.dll     
   02-Nov-2004  06:03  2000.80.985.0    815,676  Sqldata.dll      
   02-Nov-2004  06:03  2000.80.985.0  4,215,360  Sqldmo.dll       
   02-Nov-2004  06:02                    25,172  Sqldumper.exe    
   02-Nov-2004  06:02  2000.80.985.0    156,224  Sqlmaint.exe     
   02-Nov-2004  06:03  2000.80.985.0    180,792  Sqlmap70.dll     
   02-Nov-2004  06:03  2000.80.985.0    188,992  Sqlmmc.dll
   02-Nov-2004  06:03  2000.80.985.0    401,984  Sqlqry.dll       
   02-Nov-2004  06:03  2000.80.985.0     57,920  Sqlrepss.dll     
   02-Nov-2004  06:03  2000.80.985.0  7,712,849  Sqlservr.exe     
   02-Nov-2004  06:03  2000.80.985.0    590,396  Sqlsort.dll      
   02-Nov-2004  06:03  2000.80.985.0     45,644  Sqlvdi.dll
   02-Nov-2004  06:03  2000.80.985.0    106,588  Sqsrvres.dll
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsgnet.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmslpcn.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmsqlgc.dll     
   02-Nov-2004  06:03  2000.80.985.0     33,340  Ssmssnet.dll     
   02-Nov-2004  06:03  2000.80.985.0     82,492  Ssnetlib.dll
   02-Nov-2004  06:03  2000.80.985.0     25,148  Ssnmpn70.dll
   02-Nov-2004  06:03  2000.80.985.0    123,456  Stardds.dll
   02-Nov-2004  06:03  2000.80.985.0    158,240  Svrnetcn.dll     
   02-Nov-2004  06:02  2000.80.985.0     76,416  Svrnetcn.exe     
   02-Nov-2004  06:03  2000.80.985.0     49,228  Ums.dll          
   02-Nov-2004  06:03  2000.80.985.0     74,304  Xplog70.dll      
   02-Nov-2004  06:03  2000.80.985.0     98,872  Xpweb70.dll      
   17-Nov-2004  18:13                     6,615  Hotfix1.inf
   17-Nov-2004  18:13                     2,471  Hotfix2.inf
   30-Sep-2003  22:34  8.0.21213.0      352,256  Msvcr71.dll      
   30-Sep-2003  22:34  2000.80.796.0     57,904  Osql.exe
   30-Sep-2003  22:34  2000.80.534.0    127,548  Sqdedev.dll      
   30-Sep-2003  22:34  2000.80.194.0    180,290  Sqlunirl.dll     
   02-Nov-2004  05:01  2000.80.985.0    159,813  Replres.rll
   02-Nov-2004  05:28  2000.80.985.0    172,032  Semobj.rll
   02-Nov-2004  04:53  2000.80.985.0     28,672  Sqlevn70.rll
   02-Nov-2004  05:17  2000.80.985.0    479,232  Sqlmmc.rll
Nota Devido a dependências de ficheiros, a correcção mais recente que contenha estes ficheiros também poderão conter ficheiros adicionais.

Como contornar

Para contornar este problema, utilize um dos seguintes métodos:
  • Utilize a função Converter para converter a coluna de data/hora como uma constante smalldate.
  • Crie um índice não agrupado na coluna smalldatetime .

Ponto Da Situação

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

Mais Informação

Passos para reproduzir o comportamento

As seguintes instruções de Transact-SQL no SQL Server 2000 com a correcção criar 8.00.0837 e versões posteriores incorrectamente devolvem 0 linhas:
select @@version
go
 
Create Table t1 (
      c1 SmallDateTime,
      c2 varchar(15)
)
go
 
Create Table t2 (
      c1 smalldatetime,
      c2 Varchar(15)
)
go
 
Insert Into t1 Values ('2004-10-21','abc')
Insert Into t1 Values ('2004-10-21','efg')
 
Insert Into t2 Values ('2004-10-21', 'ddd') 
Insert Into t2 Values ('2004-10-21', 'eee') 
 
 
declare @Date datetime
set @Date = '2004-10-21'
 
Select t1.*, t2.*
from t1 join t2 
On t1.c1 = t2.c1
Where t1.c1 = @Date
go
 
drop table t1
drop table t2
go 
os resultados correctos são as quatro linhas seguintes. Estas linhas são obtidas num computador com o SQL Server 2000 hotfix compilação 8.00.0760,.0818, e compilações através de construir.0836.
c1                                                     c2              c1                                                     c2              
------------------------------------------------------ --------------- ------------------------------------------------------ --------------- 
2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    ddd
2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    eee
2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    ddd
2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    eee
Para obter mais informações sobre o esquema de atribuição de nomes para as actualizações do SQL Server, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
822499Novo esquema de atribuição de nomes de ficheiros para pacotes de actualização de software do Microsoft SQL Server
Para obter mais informações sobre a terminologia utilizada pela Microsoft quando corrige software, após a respectiva comercialização, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
824684Descrição da terminologia padrão utilizada para descrever actualizações de software da Microsoft

Propriedades

Artigo: 888998 - Última revisão: 2 de novembro de 2007 - Revisão: 1.5
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Desktop Engine (MSDE) SP3
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Personal Edition Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 3
  • Microsoft SQL Server 2000 Service Pack 3
Palavras-chave: 
kbmt kbautohotfix kbsqlserv2000presp4fix kbbug kbfix kbhotfixserver kbqfe KB888998 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 888998

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com