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

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
N.º de bugs: 473085 (SQL Server 8.0)

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
back to the top
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 datetimeset @Date = '2005-01-01'Select t1.c1, t2.c2 from t1 Join t2 on t1.smalldatetime_column = t2.smalldatetime_columnWhere 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
back to the top
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.

back to the top
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: 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.

back to the top

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.

back to the top

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.back to the top
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 .
back to the top
Ponto Da Situação
A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secção "Aplica-se a".

back to the top
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 @@versiongo 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 datetimeset @Date = '2004-10-21' Select t1.*, t2.*from t1 join t2 On t1.c1 = t2.c1Where t1.c1 = @Datego drop table t1drop table t2go 
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                                    ddd2004-10-21 00:00:00                                    abc             2004-10-21 00:00:00                                    eee2004-10-21 00:00:00                                    efg             2004-10-21 00:00:00                                    ddd2004-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
back to the top

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 888998 - Última Revisão: 01/17/2015 09:20:16 - Revisão: 1.5

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

  • kbnosurvey kbarchive kbmt kbautohotfix kbsqlserv2000presp4fix kbbug kbfix kbhotfixserver kbqfe KB888998 KbMtpt
Comentários