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

Traduções deste artigo Traduções deste artigo
ID do artigo: 288957 - Exibir os produtos aos quais esse artigo se aplica.
BUG #: 236595 (SHILOH_BUGS)
Expandir tudo | Recolher tudo

Neste artigo

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)
GO
INSERT INTO functest VALUES(1,2,3,4,5,6)
go
CREATE FUNCTION t3 (@one int, @two int, @three int) RETURNS int AS
BEGIN
  RETURN (@one*@two*@three)
END
GO
--This works correctly, returns 720
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c4,c5,c6)) correct FROM functest
go
--This is incorrect, returns 36, should be 180
SELECT avg(dbo.t3(c1,c2,c3)) * avg(dbo.t3(c1,c5,c6)) incorrect FROM functest
go
--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.

Propriedades

ID do artigo: 288957 - Última revisão: quinta-feira, 6 de novembro de 2003 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 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 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.
Clique aqui para ver a versão em Inglês deste artigo: 288957

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