Entrar

CORRECÇÃO: Função em um agregado definido pelo várias chamadas para um usuário função pode retornar resultados incorretos

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

288957
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
BUG #: 236595 (SHILOH_BUGS)
Sintomas
SQL Server pode retornar resultados incorretos para uma consulta se todas as condições a seguir forem verdadeiras:
  • A consulta contém dois ou mais referências para a mesma função agregada.
  • Essas funções agregadas recolhem como seu parâmetro os resultados de uma chamada para a mesma função definida pelo usuário (UDF).
  • As chamadas para o UDF passam o mesmo parâmetro primeiro.
  • O UDF tem dois ou mais parâmetros e os resultados que ele retorna dependem do valor desses parâmetros secundários.
Causa
O otimizador tenta localizar funções agregadas duplicadas na consulta para que cada agregado exclusivo é calculado apenas uma vez. Esse código falha ao levar em conta os parâmetros secundários que estão sendo passados para um UDF e incorretamente podem identificar dois agregados como equivalente.
Resolução
Para resolver esse problema, obtenha o service pack mais recente para o Microsoft SQL Server 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
290211INF: Como obter o Service Pack mais recente do SQL Server 2000

Hotfix

Observação : O seguinte hotfix foi criada antes do Microsoft SQL Server 2000 Service Pack 1.

A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Version      File name       Platform   -------------------------------------   8.00.251     s80251i.exe     x86				
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft SQL Server 2000 Service Pack 1.
Mais Informações
O exemplo a seguir demonstra o problema.

CREATE TABLE functest (c1 int NULL, c2 int NULL, c3 int NULL, c4 int NULL, c5 int NULL, c6 int NULL)GOINSERT INTO functest VALUES(1,2,3,4,5,6)goCREATE FUNCTION t3 (@one int, @two int, @three int) RETURNS int ASBEGIN  RETURN (@one*@two*@three)ENDGO--This works correctly, returns 720SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c4,c5,c6)) correct FROM functestgo--This is incorrect, returns 36, should be 180SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c1,c5,c6)) incorrect FROM functestgo--If you swap c1 and c6, the results are correct! (180)SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c6,c5,c1)) correct FROM functest				
Observe como obter resultados incorretos somente se ambas as referências para o UDF passam o primeiro parâmetro mesmo, ou como um nome de coluna ou um valor literal, para a função.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 288957 - Última Revisão: 01/16/2015 21:37:53 - Revisão: 3.1

  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 KbMtpt
Comentários