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

Problema ISNULL

Estas en el tema de Problema ISNULL en el foro de SQL Server en Foros del Web. Buenas tardes, tengo una duda con una select, resulta que hasta ahora he trabajado en Oracle, el cual tiene una función que se llama NVL, ...
  #1 (permalink)  
Antiguo 18/08/2011, 09:50
 
Fecha de Ingreso: julio-2010
Mensajes: 25
Antigüedad: 13 años, 9 meses
Puntos: 2
Problema ISNULL

Buenas tardes,
tengo una duda con una select, resulta que hasta ahora he trabajado en Oracle,
el cual tiene una función que se llama NVL, pues resulta que en SQL Server en "teoria" la equivalente es ISNULL, pero estoy tiendo problema, por ejemplo

en Oracle

Si yo esta select

select NVL(nombre,'pepe')
from clientes
where idCliente = 1 y ese codigo existe me retornará el nombre, pero si no existe en la base de datos un cliente con id = 1 me retornará 'pepe'

pues en SQL Server con la función es ISNULL no me funciona, ya que el problema no es que sea NULL sino que no existe nada con idCliente = 1

alguien me puede ayudar con este problema??

saludos y gracias de antemano....
  #2 (permalink)  
Antiguo 18/08/2011, 10:23
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: Problema ISNULL

IF NOT EXISTS(SELECT * FROM tutabla WHERE idCliente = 1)
BEGIN
SELECT 'Pepe'
END
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 18/08/2011, 11:09
 
Fecha de Ingreso: julio-2010
Mensajes: 25
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Problema ISNULL

Cita:
Iniciado por iislas Ver Mensaje
IF NOT EXISTS(SELECT * FROM tutabla WHERE idCliente = 1)
BEGIN
SELECT 'Pepe'
END
Esto lo conocia, pero quiero evitar hacer eso, no entiendo como en ORACLE está el NVL y en SqlServer tienes que hacer toda la movida esta, es duplicar código, ya que el ejemplo que te he puesto es sencillo.

Es la única manera??

Gracias.
  #4 (permalink)  
Antiguo 18/08/2011, 11:53
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema ISNULL

lo otro es que hagas un
select
case
when id isnull or id='' then 0 else id end as campo from tabla


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 18/08/2011, 12:57
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: Problema ISNULL

Libras, no se cumpliria con el WHERE, al no encontrar registro.

Otra opcion:

create table #clientes (id int, nombre varchar(50))
select case when nombre IS null OR nombre = '' then 'Pepe' END
from #clientes
where id = 1
IF @@ROWCOUNT = 0
SELECT 'Pepe'
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 19/08/2011, 04:45
 
Fecha de Ingreso: julio-2010
Mensajes: 25
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: Problema ISNULL

Muchas gracias por las respuestas
  #7 (permalink)  
Antiguo 19/08/2011, 19:08
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Problema ISNULL

FYI, mpacheco la función NVL no evalúa un NULL cuando no existe retorno de filas, trabaja igual que la función ISNULL.

Código:
SQL> select * from t1;

        ID DATA
---------- ------------------------------
         1 1
         2 2

SQL> select nvl(id,10) from t1 where id = 10;

no rows selected
De hecho, al comparar código, este es un caso donde se aprecia mayor flexibilidad en SQL Server.

Código:
if exists (select id from t1 where id = 10) 
        select isnull(id,10) from t1 where id = 10
    else
       select 10
vs

Código:
    declare
        c integer;
    begin
        select count(*) into c from t1 where id=10;
        
        if c > 0 then
            select nvl(id,10) from t1 where id = 10
        else
            select 10 from dual;
        end if;
    end;
Saludos

Etiquetas: isnull, nvl, oracloe, server, sql
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 20:16.