none
Cuál es la mejor práctica para hacer SP específicos RRS feed

  • Pregunta

  • Resulta que tengo que hacer un SP (procedimiento almacenado) que permita ejecutar un proceso para un registro en específico, les pongo de ejemplo un caso, que los empleados que trabajan en el departamento ventas se les incremente el salario en 2%. Entonces más o menos el procedimiento almacenado sería así (asumiendo que no le envío el código del departamento al sp desde la interfaz). Yo lo estoy haciendo así.

    inicio sp

    @porcentaje decimal

    update empleado set salario=salario*(@porcentaje/100) where iddepartamento= 5

    fin sp

    Pero un amigo me dice que lo más sensato sería hacerlo así ya que estamos trabajando con una base de datos de prueba y no se sabe al final qué codigo tendrá el departamento de ventas.

    inicio sp

    @porcentaje decimal

    update empleado set salario=salario*(@porcentaje/100) where iddepartamento= (select iddepartamento from departamento where nombre='ventas')

    fin sp

    ¿Cuál opción sería la más acertada para el caso en específico que les estoy presentando? Enfóquense solo en las dos opciones que les dí, ya que yo sé que el caso que les estoy poniendo se puede resolver de otra manera, pero lo puse porque no se me ocurre otro ejemplo.


    • Editado Juan Carlos Rcf martes, 3 de junio de 2014 16:45
    • Cambiado Enrique M. Montejo jueves, 5 de junio de 2014 8:03 Pregunta relacionada con la creación de un procedimiento almacenado.
    martes, 3 de junio de 2014 16:45

Respuestas

  • Hola.

    Tu procedimiento almacenado deberá tener dos parámetros, el IdDepartamento y el porcentaje. En tu aplicación, tendrás algún mecanismo que le permita al usuario seleccionar el departamento de ventas (por la descripción), pero tú al procedimiento le suministrarás el identificador, no la descripción.

    create proc pActualizaSalario @pIdDepartamento int, @pPorcentaje numeric (5,2) as
    
    --Incluir validación de parámetros
    
    update empleado set salario= salario*@porcentaje/100.0
    where IdDepartamento = @pIdDepartamento
    
    --Incluir tratamiento de errores, transacciones, etc.
    
    return 0


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 20 de junio de 2014 15:00
    Moderador

Todas las respuestas

  • hola

    si el id de las tablas es del tipo identity, podrias no saber cual es el id del departamente que se genero, si es asi entonces lo correcto es la segunda opcion

    ahora si estas 100% qe el id del departamento es el 5 entonces la primer opcion es valida

    la decision de una u otra es si sabes el id correcto del departamente o no

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    martes, 3 de junio de 2014 17:50
  • Hola.

    Tu procedimiento almacenado deberá tener dos parámetros, el IdDepartamento y el porcentaje. En tu aplicación, tendrás algún mecanismo que le permita al usuario seleccionar el departamento de ventas (por la descripción), pero tú al procedimiento le suministrarás el identificador, no la descripción.

    create proc pActualizaSalario @pIdDepartamento int, @pPorcentaje numeric (5,2) as
    
    --Incluir validación de parámetros
    
    update empleado set salario= salario*@porcentaje/100.0
    where IdDepartamento = @pIdDepartamento
    
    --Incluir tratamiento de errores, transacciones, etc.
    
    return 0


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 20 de junio de 2014 15:00
    Moderador