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

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.

288957
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Nº DE ERROR: 236595 (SHILOH_BUGS)
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)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				
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.

Warning: This article has been translated automatically

Propiedades

Id. de artículo: 288957 - Última revisión: 01/16/2015 21:37:44 - Revisión: 3.1

  • Microsoft SQL Server 2000 Standard Edition
  • kbnosurvey kbarchive kbmt kbbug kbfix kbqfe kbsqlserv2000sp1fix KB288957 KbMtes
Comentarios