Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

División entre cero en un update

Estas en el tema de División entre cero en un update en el foro de SQL Server en Foros del Web. Hola chicos, ante todo gracias por leerme. A continuación expongo mi problema: Tengo un procedimiento almacenado para actualizar 3 campos. El procedimiento es el siguiente: ...
  #1 (permalink)  
Antiguo 25/09/2009, 04:59
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 0
División entre cero en un update

Hola chicos, ante todo gracias por leerme.

A continuación expongo mi problema:

Tengo un procedimiento almacenado para actualizar 3 campos. El procedimiento es el siguiente:

UPDATE IMPORTES

SET IMPORTES.[IMP NETO] = ([IMP BRUTO]-[DTO TARIFA]-[DTO VOLUMEN]),
IMPORTES.[% DTO s/ IMP B] = (([DTO TARIFA]+[DTO VOLUMEN])/[IMP BRUTO])

END

Pues bien, el problema que tengo es que cuando el campo [IMP BRUTO] equivale a cero me salta el error de que no se puede dividir entre cero.

He pensado hacer un case o un if... pero no logro la manera de insertarlo en el código.

Si alguien me pudiese echar una mano... sería de gran ayuda.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 25/09/2009, 05:22
 
Fecha de Ingreso: noviembre-2007
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: División entre cero en un update

Si pruebas de poner:
WHERE IMPORTES.IMP BRUTO<>'0'
  #3 (permalink)  
Antiguo 25/09/2009, 05:47
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 0
Respuesta: División entre cero en un update

Entonces no se me actualizarían en los que el importe bruto sea cero.

Lo ideal sería que cuando IMP BRUTO valga cero, se le pudiese dar de valor 1. Ya que un número entre 1 es el mismo número. Es lo que había pensado yo.
  #4 (permalink)  
Antiguo 25/09/2009, 07:56
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: División entre cero en un update

Código:
UPDATE IMPORTES
SET IMPORTES.[IMP NETO] = ([IMP BRUTO]-[DTO TARIFA]-[DTO VOLUMEN]),
IMPORTES.[% DTO s/ IMP B] = (([DTO TARIFA]+[DTO VOLUMEN])/
                              CASE [IMP BRUTO] WHEN 0 THEN 1 ELSE [IMP BRUTO] END)
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 25/09/2009, 08:00
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: División entre cero en un update

Has probado con el Case When

Código:
Update Importes
Set [Imp Neto] = ([Imp Bruto] - [Dto Tarifa] - [Dto Volumen]),
      [% Dto s/ Imp B] =  (([Dto Tarifa]+[Dto Volumen])/(Case [Imp Bruto] When 0 Then 1 Else [Imp Bruto] End);
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #6 (permalink)  
Antiguo 25/09/2009, 12:06
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: División entre cero en un update

Es una mala practica comparar <> '0', es mejor > 0
  #7 (permalink)  
Antiguo 28/09/2009, 01:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: División entre cero en un update

Gracias por el consejo pero explicame porque es una mala práctica, ¿si resulta que tengo un numero negativo?
  #8 (permalink)  
Antiguo 28/09/2009, 02:03
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 0
Respuesta: División entre cero en un update

Muchisimas gracias, me funciona correctamente.

Saludos, Ángel.
  #9 (permalink)  
Antiguo 28/09/2009, 11:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: División entre cero en un update

Aunque ya se habia aclarado con anterioridad, aqui pongo el porque del no uso de "<>":

33. Los operadores de la cláusula WHERE afectan la velocidad en la resolución de una consulta. Se debe usar mas el operador “=” y usar menos el operador “<>” (en lo posible). En su orden de rapidez son:
 =
 >, >=, <, <=
 LIKE
 <>
  #10 (permalink)  
Antiguo 28/09/2009, 11:33
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: División entre cero en un update

Interesante...


Podrias pasar la ruta para ver los otros 32 puntos?


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #11 (permalink)  
Antiguo 28/09/2009, 14:09
 
Fecha de Ingreso: noviembre-2007
Mensajes: 55
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: División entre cero en un update

Me parece perfecto el orden de rápidez, pero repito, si tengo un numero negativo como se resolvería sin usar el "<>"

Gracias de nuevo
  #12 (permalink)  
Antiguo 28/09/2009, 15:15
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: División entre cero en un update

> 0 or < 0

Es un documento que tengo que se llama GUA DEL DESARROLLO, de J. M. Salazar de Microsoft, si alguien lo quiere con todo gusto me lo piden a mi cuenta de correo y recibiran una copia del mismo.

Saludos
  #13 (permalink)  
Antiguo 29/09/2009, 10:47
Avatar de otreblanc  
Fecha de Ingreso: mayo-2005
Ubicación: Chiapas, la última frontera...
Mensajes: 73
Antigüedad: 19 años
Puntos: 0
Respuesta: División entre cero en un update

Cita:
Iniciado por iislas Ver Mensaje
> 0 or < 0

Es un documento que tengo que se llama GUA DEL DESARROLLO, de J. M. Salazar de Microsoft, si alguien lo quiere con todo gusto me lo piden a mi cuenta de correo y recibiran una copia del mismo.

Saludos

Me gustaria tener una copia de la GUA DEL DESARROLLO; cual es tu cuenta de correo??? en tu perfil no esta
  #14 (permalink)  
Antiguo 01/10/2009, 18:39
 
Fecha de Ingreso: abril-2009
Mensajes: 40
Antigüedad: 15 años
Puntos: 0
Respuesta: División entre cero en un update

Cita:
Iniciado por iislas Ver Mensaje
> 0 or < 0

Es un documento que tengo que se llama GUA DEL DESARROLLO, de J. M. Salazar de Microsoft, si alguien lo quiere con todo gusto me lo piden a mi cuenta de correo y recibiran una copia del mismo.

Saludos

A mi tambien Me gustaria tener una copia de la GUA DEL DESARROLLO; cual es tu cuenta de correo??? espero no los puedas hacer llegar
  #15 (permalink)  
Antiguo 02/10/2009, 11:28
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: División entre cero en un update

Mi cuenta, esta en mi perfil.......
  #16 (permalink)  
Antiguo 02/10/2009, 13:12
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Busqueda Respuesta: División entre cero en un update

Cita:
Iniciado por iislas Ver Mensaje
Mi cuenta, esta en mi perfil.......
No esta visible, tienes que habilitar el mostrado en tu panel de control..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #17 (permalink)  
Antiguo 02/10/2009, 14:10
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: División entre cero en un update

Gracias, ya lo puse en mi perfil.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:35.