¿Por qué aparece este mensaje?

10/09/2004 - 12:42 por Eje | Informe spam
Alguna vez en procedimientos almacenados me aparece este error:

Advertencia: valor NULL eliminado por el agregado u otra operación SET.

No sé muy bien a qué puede deberse (vamos, entiendo que es porque me ha
quitado algún nulo, lo que no entiendo es por qué avisa de esto) ni en qué
repercute.
La última vez que me ha dado he puesto comprobaciones antes de cada
instrucción select, insert y update para ver en cual me ocurre esto, pero me
pone el mensaje antes de hacer nada siquiera, y no sé por qué me ocurre ni
si debo preocuparme por ello.

Un saludo y gracias de antemano

Preguntas similare

Leer las respuestas

#1 Liliana Sorrentino
10/09/2004 - 14:05 | Informe spam
Hola Eje,
según los BOL, "SUM, AVG, COUNT, MAX y MIN omiten los valores NULL; COUNT(*)
no lo hace."
Acá te doy un ejemplo, primero se corre un script sobre una tabla sin nulos,
y no da el mensaje.
Después se agrega una fila con un dato nulo que está invocado en la función
de agregado SUM, y sí sale el mensaje al que hacés referencia. Si es
importante o no, dependerá de las características que deba tener tu
información.
Saludos, Liliana.

create table #test
(clave smallint primary key,
importe dec(10,2) null)
insert #test select 1, 10
insert #test select 2, 20
insert #test select 3, 30
select cantidad = count(clave), sumatoria = sum(importe)
from #test

cantidad sumatoria
3 60.00

insert #test select 4, null
select cantidad = count(clave), sumatoria = sum(importe)
from #test

cantidad sumatoria
4 60.00

Advertencia. Valor nulo eliminado del agregado.



"Eje" escribió en el mensaje
news:
Alguna vez en procedimientos almacenados me aparece este error:

Advertencia: valor NULL eliminado por el agregado u otra operación SET.

No sé muy bien a qué puede deberse (vamos, entiendo que es porque me ha
quitado algún nulo, lo que no entiendo es por qué avisa de esto) ni en qué
repercute.
La última vez que me ha dado he puesto comprobaciones antes de cada
instrucción select, insert y update para ver en cual me ocurre esto, pero


me
pone el mensaje antes de hacer nada siquiera, y no sé por qué me ocurre ni
si debo preocuparme por ello.

Un saludo y gracias de antemano



Respuesta Responder a este mensaje
#2 Eje
10/09/2004 - 14:33 | Informe spam
Liliana Sorrentino
Hola Eje,
según los BOL, "SUM, AVG, COUNT, MAX y MIN omiten los valores NULL;


COUNT(*)
no lo hace."
Acá te doy un ejemplo, primero se corre un script sobre una tabla sin


nulos,
y no da el mensaje.
Después se agrega una fila con un dato nulo que está invocado en la


función
de agregado SUM, y sí sale el mensaje al que hacés referencia. Si es
importante o no, dependerá de las características que deba tener tu
información.
Saludos, Liliana.

create table #test
(clave smallint primary key,
importe dec(10,2) null)
insert #test select 1, 10
insert #test select 2, 20
insert #test select 3, 30
select cantidad = count(clave), sumatoria = sum(importe)
from #test

cantidad sumatoria
3 60.00

insert #test select 4, null
select cantidad = count(clave), sumatoria = sum(importe)
from #test

cantidad sumatoria
4 60.00

Advertencia. Valor nulo eliminado del agregado.



Muchas gracias. Juraría que no debería darme ya que empleo COALESCE para
evitar esos casos, pero aún así revisaré a ver por donde puedan venir los
tiros.

Un saludo
Respuesta Responder a este mensaje
#3 Liliana Sorrentino
10/09/2004 - 14:56 | Informe spam
Hola,
Perdoname si es muy ingenua la pregunta, pero por las dudas.
El uso del COALESCE ¿es sobre el dato o sobre la SUMA?
Si ponés
SELECT cantidad = COUNT(clave), sumatoria = COALESCE(SUM(importe),0) FROM
#test
Te dará el mensaje.
En cambio si es:
SELECT cantidad = COUNT(clave), sumatoria = SUM(COALESCE(importe,0)) FROM
#test
Entonces no debería salir.

Liliana.

"Eje" escribió en el mensaje
news:
Liliana Sorrentino
> Hola Eje,
> según los BOL, "SUM, AVG, COUNT, MAX y MIN omiten los valores NULL;
COUNT(*)
> no lo hace."
> Acá te doy un ejemplo, primero se corre un script sobre una tabla sin
nulos,
> y no da el mensaje.
> Después se agrega una fila con un dato nulo que está invocado en la
función
> de agregado SUM, y sí sale el mensaje al que hacés referencia. Si es
> importante o no, dependerá de las características que deba tener tu
> información.
> Saludos, Liliana.
>
> create table #test
> (clave smallint primary key,
> importe dec(10,2) null)
> insert #test select 1, 10
> insert #test select 2, 20
> insert #test select 3, 30
> select cantidad = count(clave), sumatoria = sum(importe)
> from #test
>
> cantidad sumatoria
> 3 60.00
>
> insert #test select 4, null
> select cantidad = count(clave), sumatoria = sum(importe)
> from #test
>
> cantidad sumatoria
> 4 60.00
>
> Advertencia. Valor nulo eliminado del agregado.

Muchas gracias. Juraría que no debería darme ya que empleo COALESCE para
evitar esos casos, pero aún así revisaré a ver por donde puedan venir los
tiros.

Un saludo



Respuesta Responder a este mensaje
#4 Eje
10/09/2004 - 14:59 | Informe spam
Liliana Sorrentino
Hola,
Perdoname si es muy ingenua la pregunta, pero por las dudas.
El uso del COALESCE ¿es sobre el dato o sobre la SUMA?
Si ponés
SELECT cantidad = COUNT(clave), sumatoria = COALESCE(SUM(importe),0) FROM
#test
Te dará el mensaje.
En cambio si es:
SELECT cantidad = COUNT(clave), sumatoria = SUM(COALESCE(importe,0)) FROM
#test
Entonces no debería salir.



Vuelves a tener razón, estoy haciéndolo de la primera forma, lo cambiaré
para que no aparezca.
Pero me surge una duda ¿no es más óptimo hacerlo de la primera? de esa forma
sólo te ejecuta la función COALESCE una vez, de la otra manera lo hará por
cada registro que procese ¿no es así?.

Un saludo
Respuesta Responder a este mensaje
#5 Liliana Sorrentino
10/09/2004 - 15:27 | Informe spam
Aparentemente no hay diferencia de rendimiento y tampoco de resultado, lo
único diferente que veo es la aparición del mensaje.
PERO EN ESTE CASO QUE PUSIMOS DE EJEMPLO.
Veamos este otro:

si es nulo
select cantidad = count(clave), sumatoria = COALESCE(sum(importe + 10),0)
from #test
Resultado:
cantidad sumatoria
4 90.00

Advertencia. Valor nulo eliminado del agregado.

verificando si es nulo, el resultado es diferente.
select cantidad = count(clave), sumatoria = sum(COALESCE(importe,0) + 10)
from #test
Resultado:
cantidad sumatoria
4 100.00



"Eje" escribió en el mensaje
news:
Liliana Sorrentino
> Hola,
> Perdoname si es muy ingenua la pregunta, pero por las dudas.
> El uso del COALESCE ¿es sobre el dato o sobre la SUMA?
> Si ponés
> SELECT cantidad = COUNT(clave), sumatoria = COALESCE(SUM(importe),0)


FROM
> #test
> Te dará el mensaje.
> En cambio si es:
> SELECT cantidad = COUNT(clave), sumatoria = SUM(COALESCE(importe,0))


FROM
> #test
> Entonces no debería salir.

Vuelves a tener razón, estoy haciéndolo de la primera forma, lo cambiaré
para que no aparezca.
Pero me surge una duda ¿no es más óptimo hacerlo de la primera? de esa


forma
sólo te ejecuta la función COALESCE una vez, de la otra manera lo hará por
cada registro que procese ¿no es así?.

Un saludo



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida