none
Consultar tabla antes de insertar RRS feed

  • Pregunta

  • Hola,

    Tengo 3 tablas se llaman T_Prestamo, T_Invertario_Terminal y T_Estado, la tabla T_Prestamo insertar prestamos de terminales por lo que el terminal prestado no deberia volverse a prestar.

    Como podría crear un stored procedure que antes de realizar el prestamo (insertar) verifique el estado del terminal (T_Inventario_Terminal). Tengo entendido que es con un "IF" pero sinceramente no se como "invocar" la otra tabla para poder revisar antes de insertar el prestamo

    Comparto el codigo de mi sp:

    USE [ControlDeInventarios]
    GO
    /****** Object:  StoredProcedure [dbo].[sp_insertar_prestamo]    Script Date: 3/12/2015 11:34:08 AM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[sp_insertar_prestamo] 
       (
       @PKPrestamo int,
       @FKUsu VARCHAR(50),
       @FKEstado int,
       @nombre varchar(25),
       @correo varchar(25),
       @fechad date,
       @terminal int,
       @comentario varchar(200),
       @fkaccesorio int
       
      )
    as
    begin
    	Insert into T_Prestamo(PKPrestamo,FKUsuarios,FKEstado1,Fecha,NombreSolicitante,CorreoElectronicoSolicitante,FechaDevolucion,Comentario_Prestamo,fkterminal,fkaccesorio)
    	values(@PKPrestamo,@FKUsu,@FKEstado,GETDATE(),@nombre,@correo,@fechad,@comentario,@terminal,@fkaccesorio)
    
    end
    

    jueves, 12 de marzo de 2015 17:53

Respuestas

  • hola

    si quieres resolverlo en un procedure el planteo deberias haberlo realizado en el foro de sql server no en el de c#

    ahora si quieres realizar la validacion creando una funciona en c# eso es otra cosa

    antes de invocar el codigo que llama al procedure ControlDeInventarios podrias generar codigo c# que invoque a otro procedure que realice la validacion

    segun cual sea la respuesta invoca a ControlDeInventarios o no, pero lo resuelves desde codigo .net, no desde T-SQL

    si te consideras desarrollador y no un DBA, no pones logica de negocio en la base de datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina




    • Editado Leandro TuttiniMVP jueves, 12 de marzo de 2015 18:06
    • Marcado como respuesta Dna360 jueves, 12 de marzo de 2015 18:52
    jueves, 12 de marzo de 2015 18:05

Todas las respuestas

  • De alguna forma al momento de invocar este procedimiento deberías obtener el estado del T_inventario_Terminal como parametro de entrada, asi:

    if @estado = 0 then

    <instrucciones>

    else

    <instrucciones>

    Asumiendo que el estado es un bit, sería 0 o 1; si es otro tipo de datos que le definiste al estado en la tabla T_inventario_Terminal, deberías jugar con ello.

    Para más información sobre la sintaxis de if-else en T-SQL y unos ejemplos podrías visitar:
    https://msdn.microsoft.com/es-pe/library/ms182717.aspx

    Esa sería la idea, espero que te ayude.

    Un abrazo.

    jueves, 12 de marzo de 2015 18:04
  • hola

    si quieres resolverlo en un procedure el planteo deberias haberlo realizado en el foro de sql server no en el de c#

    ahora si quieres realizar la validacion creando una funciona en c# eso es otra cosa

    antes de invocar el codigo que llama al procedure ControlDeInventarios podrias generar codigo c# que invoque a otro procedure que realice la validacion

    segun cual sea la respuesta invoca a ControlDeInventarios o no, pero lo resuelves desde codigo .net, no desde T-SQL

    si te consideras desarrollador y no un DBA, no pones logica de negocio en la base de datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina




    • Editado Leandro TuttiniMVP jueves, 12 de marzo de 2015 18:06
    • Marcado como respuesta Dna360 jueves, 12 de marzo de 2015 18:52
    jueves, 12 de marzo de 2015 18:05
  • Hola,

    ¿Cómo válidas que el terminal ya ha sido prestado?¿La tabla T_Estado tiene alguna referencia, algún flag?. ¿Podrías darnos más detalles?


    jueves, 12 de marzo de 2015 18:08
  • Cree una función para que solo me cargara los que tuvieran el estado que necesito, no se como no se me ocurrió antes hehe

    Gracias

    jueves, 12 de marzo de 2015 18:53