none
problema con IF - ELSE IF en SQL SERVER RRS feed

  • Pregunta

  • Chicos tengo un problema, quiero hacer un if - else if - else ya que tengo tres condiciones de busqueda en SQL server pero no me funciona.

    ayudaa

    dejo el codigo

    CREATE PROCEDURE [dbo].[SP_ActivarProcesos]
    @nombre      varchar(90),
    @correlativo varchar(20)
    as
     if (@correlativo = '-1')
        begin
         select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.NOMBRE LIKE '*'+@nombre+'*')
        end
    else if (@correlativo = '-1' and @nombre = 'nom')
    begin
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.IdEmpresaCompradora = @mandante)
    end
    else
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.CorrelativoSistema = @correlativo)
    
    


    jueves, 23 de marzo de 2017 19:43

Respuestas

  • si me faltaba el %, lo que quería era hacer un if - else if- else if.

    al final me funcionó y lo deje así.

    ALTER PROCEDURE [dbo].[SP_ActivarProcesos]
    @nombre      varchar(90),
    @correlativo varchar(20),
    @mandante    varchar(90)
    as
     if (@correlativo = '-1')
     begin
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.Nombre LIKE '%'+@nombre+'%')
    end
    else if (@nombre = 'nom')
    begin
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.CorrelativoSistema = @correlativo)
    end
    else if (@correlativo = '-2' AND @nombre = 'nomb')
    begin 
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.IdEmpresaCompradora = @mandante)
    end

    gracias

    jueves, 23 de marzo de 2017 20:18

Todas las respuestas

  • Que es lo que no funciona?

    El caracter que representa un comodin o wildcard en T-SQL es el simbolo de porcentaje %.

    Ejemplo:

    select col1,col2,col3 from tuTabla where col3 like '%' + @whatever + '%';

    La proxima pregunta es donde declaras la viariable @mandante porque no la veo que sea un parametro?

    Toda esa logica la puedes expresar en una unica sentencia usando los operadores logicos AND/OR.

    ...
    where
        (@correlativo = -1 and @nombre <> 'nom' and nombre like '%' + @nombre + '%')
        or (@correlativo = -1 and @nombre = 'nom' and idempresacompradora = @mandate)
        or (correlativo = @correlativo and @correlativo <> - 1)
    option (recompile);


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas





    jueves, 23 de marzo de 2017 20:06
  • si me faltaba el %, lo que quería era hacer un if - else if- else if.

    al final me funcionó y lo deje así.

    ALTER PROCEDURE [dbo].[SP_ActivarProcesos]
    @nombre      varchar(90),
    @correlativo varchar(20),
    @mandante    varchar(90)
    as
     if (@correlativo = '-1')
     begin
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.Nombre LIKE '%'+@nombre+'%')
    end
    else if (@nombre = 'nom')
    begin
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.CorrelativoSistema = @correlativo)
    end
    else if (@correlativo = '-2' AND @nombre = 'nomb')
    begin 
    select LIC_Licitacion.Nombre, LIC_Licitacion.idEstadoLicitacion, LIC_Licitacion.NombreEmpresaCompradora, LIC_Licitacion.CorrelativoSistema, LIC_Licitacion.FechaCreacion, LIC_EstadoLicitacion.Descripcion 
    from LIC_Licitacion inner join LIC_EstadoLicitacion on LIC_Licitacion.idEstadoLicitacion = LIC_EstadoLicitacion.idEstadoLicitacion
    where (LIC_Licitacion.IdEmpresaCompradora = @mandante)
    end

    gracias

    jueves, 23 de marzo de 2017 20:18