REVISIÓN: Función en un agregado definido por varias llamadas a un usuario función puede devolver resultados incorrectos

Seleccione idioma Seleccione idioma
Id. de artículo: 288957 - Ver los productos a los que se aplica este artículo
Nº DE ERROR: 236595 (SHILOH_BUGS)
Expandir todo | Contraer todo

En esta página

Síntomas

SQL Server puede devolver resultados incorrectos para una consulta si se cumplen las condiciones siguientes:
  • La consulta contiene dos o más referencias a la misma función agregada.
  • Estas funciones de agregado toman como su parámetro de los resultados de una llamada a la misma función definida por el usuario (UDF).
  • Las llamadas a la función definida por el usuario pasar el mismo parámetro primero.
  • ÉSTE toma dos o más parámetros y los resultados que devuelve son depende del valor de los parámetros secundarios.

Causa

El optimizador intenta buscar funciones duplicadas agregadas en la consulta para que sólo se calcula cada agregado único de una vez. Ese código no puede tener en cuenta los parámetros secundarios que se pasan a un archivo UDF y pueden identificar incorrectamente dos agregados como equivalente.

Solución

Para resolver este problema, consiga el Service Pack más reciente para Microsoft SQL Server 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211INF: Cómo obtener el Service Pack más reciente de SQL Server 2000

revisión

Nota : se creó la siguiente revisión antes de SQL Server 2000 Service Pack 1.

La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Version      File name       Platform
   -------------------------------------

   8.00.251     s80251i.exe     x86

				

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se corrigió por primera vez en el Service Pack 1 de Microsoft SQL Server 2000.

Más información

En el ejemplo siguiente se muestra el 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
				
Tenga en cuenta cómo obtener resultados incorrectos sólo si ambas referencias a éste pasar el primer parámetro mismo, ya sea como un nombre de columna o un valor literal a la función.

Propiedades

Id. de artículo: 288957 - Última revisión: jueves, 06 de noviembre de 2003 - Versión: 3.1
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
Palabras clave: 
kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 288957

Enviar comentarios

 

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