IF en SQL Server

Necesito usar de alguna forma el IF que yo usaría en otro lenguaje.
Tengo un modulo de pedido de materiales para el área de almacenes de una tienda, y como es lógico, no se debería poder pedir más de lo que se tiene de un producto, por decir, si solo tengo 5 planchas en mi almacen, no puedo pedir más de 5.
Tengo un procedimiento almacenado que se debe encargar de todo eso y si es que se pasa la validación insertar datos en una tabla de detalles y actualizar el valor que se tiene en el almacen, en este caso, restar lo que se tenia antes menos lo que se ha pedido.
El procedimiento más o menos es el siguiente:
Se supone que en la parte que esta con comentarios debería haber algo que permita saber si es que se tiene más de lo que se esta pidiendo:
create procedure sp_addDetalleRequerimiento
    @idRequerimiento bigint,@cantidad int,@producto varchar(120),
    @mensaje varchar(10) output
as
    declare @idDetalle bigint
    declare @idProd bigint
    declare @costo real
    declare @cantidadReal int
    set @idDetalle=(select count(*)from detallerequerimientos)+1  
    set @idProd=(select idProducto from productos where nombre=@producto)
    set @costo=(select costoUnitario from productos where idProducto=@idProd)
    set @cantidadReal=(select cantidadStock from productos where idProd=@idProd)
    /*Se Supone que en esta parte se deberia hacer la validacion, deberia ser algo como::
    set @mensaje='Error'
    if @cantidad>=@cantidad real then --Busco como hacer esto
        insert into detalleRequerimientos
        values(@idDetalle,@idRequerimiento,@costo,@cantidad,@idMaterial,'INCONCLUSO')
        Update Productos
        set cantidadStock=cantidadStock - @cantidad where idProducto=@idProd
        set mensaje='OK'
    end if
Go
Lo que quiero hacer mediante este procedimiento es manejar toda la parte de validaciones desde el servidor de datos, la variable @mensaje es una variable de tipo output que me dirá si se ha realizado correctamente el pedido del producto una ves que se inserten los valores en la tabla de requerimientos o pedidos y se actualize el stock de la tabla productos. Cabe resaltar que necesito usar los Operadores Mayor, Mayo o igual, menor, menor o igual, por eso es que no he podido hacerlo con el select case adeas no es solo un select, es un SP que luego tiene que insertar y actualizar datos.

1 respuesta

Respuesta
1
Como en tu caso, más de una conexión puede estar solicitando validar la operación, te recomiendo que manejes TRANSACCIONES IMPLÍCITAS (BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN), y el código debería verse más o menos así.
if (SELECT cantidadStock-@cantidad FROM productos where idProd = @idProd)>0
 begin
insert into detalleRequerimientos
values(@idDetalle,@idRequerimiento,@costo,@cantidad,@idMaterial,'INCONCLUSO')
Update Productos
set cantidadStock=cantidadStock - @cantidad where idProducto=@idProd
set mensaje='OK'
end if
Hola, estuve probando, cambie los nombres de algunas tablas y campos.
Hice lo que esta debajo pero tengo el siguiente erro al ejecutar todo el código:
"Mens 102, Nivel 15, Estado 1, Procedimiento sp_addDetRequerimiento, Línea 21
Sintaxis incorrecta cerca de 'if'."
Este es el código que he tratado de ejecutar y no ha funcionado:
--Procedimiento para insertar registros en el detalle del requerimiento
create procedure sp_addDetRequerimiento
@idRequerimiento bigint,@cantidad int,@material varchar(120),
@mensaje varchar(5) output
as
declare @idDetalle bigint
declare @idMaterial bigint
declare @costo real
set @idDetalle=(select count(*)from detallerequerimientos)+1
set @idMaterial=(select idMaterial from materiales where nombre=@material /*and descripcion=@desc*/)
set @costo=(select costoUnitario from materiales where idMaterial=@idMaterial)
set @mensaje='ERROR'
if (SELECT cantidadStock - @cantidad FROM materiales where idMaterial = @idMaterial) >= 0
begin
insert into detalleRequerimientos
values(@idDetalle,@idRequerimiento,@costo,@cantidad,@idMaterial,'INCONCLUSO')
update materiales
set cantidadStock=cantidadStock-@cantidad where idMaterial=@idMaterial
set @mensaje='OK'
end if
go
Te comento que uso Microsoft SQL Server 2005 por si eso es importante.
en lugar de END IF, es solamente END

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas