CORRECÇÃO: Várias chamadas para um utilizador definido função dentro de um agregado função poderão devolver valores incorrectos

Traduções de Artigos Traduções de Artigos
Artigo: 288957 - Ver produtos para os quais este artigo se aplica.
N.º DE BUGS: 236595 (SHILOH_BUGS)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

SQL Server poderá devolver resultados incorrectos para uma consulta se todas as condições seguintes forem verdadeiras:
  • A consulta contém dois ou mais referências a mesma função de agregação.
  • Estas funções de agregação demorar como respectivo parâmetro os resultados de uma chamada para a mesma função definida pelo utilizador (UDF).
  • As chamadas para o UDF passam o mesmo parâmetro primeiro.
  • O UDF utiliza dois ou mais parâmetros e os resultados que devolve dependem do valor desses parâmetros secundários.

Causa

O optimizador tenta localizar duplicadas agregação na consulta para que cada função de agregação exclusiva uma vez só seja calculada. Esse código de falha a ter em consideração os parâmetros secundários que são a ser transmitidos para um UDF e incorrectamente poderão identificar duas agregados como equivalente.

Resolução

Para resolver este problema, obtenha o service pack mais recente do Microsoft SQL Server 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
290211INF: How to Obtain the Latest SQL Server 2000 Service Pack

Correcção

Nota : A correcção seguinte foi criada antes para o Microsoft SQL Server 2000 Service Pack 1.

A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Version      File name       Platform
   -------------------------------------

   8.00.251     s80251i.exe     x86

				

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no Microsoft SQL Server 2000 Service Pack 1.

Mais Informação

O exemplo seguinte 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
				
Repare como obter resultados incorrectos se ambas as referências para o UDF passam o mesmo primeiro parâmetro, como um nome de coluna ou o valor literal para a função.

Propriedades

Artigo: 288957 - Última revisão: 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 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: 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