none
procedimiento almacenado con sql como lenguaje de programacion RRS feed

  • Pregunta

  • USE [Base_Datos_Educacional]
    GO
    /****** Object:  StoredProcedure [dbo].[SP_INSERTAR_MATRICULA]    Script Date: 10/11/2016 1:41:24 PM ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[SP_INSERTAR_MATRICULA]
    @Num_Matricula	int,	
    @Fecha	date,
    @Num_Estudiante	nvarchar(10),
    @Termino nvarchar(10),
    @Semestre int,
    @Candidato_Graduacion bit,
    @Fecha_Comienzo date,
    @Departamento int,
    @Curso int,
    @Fecha_Primer_Dia_Clases date,
    @Ultima_Asistencia date
    
    AS
    BEGIN
    INSERT INTO Matriculas_Tabla 
    VALUES
    (
    @Num_Matricula,	
    @Fecha,
    @Num_Estudiante,
    @Termino,
    @Semestre,
    @Candidato_Graduacion,
    @Fecha_Comienzo,
    @Departamento,
    @Curso,
    @Fecha_Primer_Dia_Clases,
    @Ultima_Asistencia
    )	
    end

    Este debe el procedimiento almacenado pero cuando vaya a grabar @Fecha_Primer_Dia_Clases debe ser de la siguiente manera.

    if la @Fecha < @Fecha_Comienzo then

    @Fecha_Primer_Dia_Clases = @Fecha_Comienzo

    else if @Fecha > @Fecha_Comienzo y @Fecha=Lunes then

    @Fecha_Primer_Dia_Clases = Martes

    y asi sucesivamente hasta que diga que si @Fecha = Viernes entonces

    @Fecha_Primer_Dia_Clases va a ser = a la fecha del proximo lunes

    jueves, 10 de noviembre de 2016 18:18

Respuestas

  • Efrain Diaz,

    Pienso que el valor de cada parámetro debería ser calculado desde la aplicación cliente (llámese capa de lógica de negocios), el procedimiento almacenado debería persistir -en la tabla- los argumentos enviados. En caso requieras hacerlo desde el procedimiento almacenado puedes hacer lo siguiente:

    CREATE PROCEDURE dbo.SP_INSERTAR_MATRICULA
        @Num_Matricula int,	
        @Fecha date,
        @Num_Estudiante	nvarchar(10),
        @Termino nvarchar(10),
        @Semestre int,
        @Candidato_Graduacion bit,
        @Fecha_Comienzo date,
        @Departamento int,
        @Curso int,
        @Fecha_Primer_Dia_Clases date,
        @Ultima_Asistencia date
    AS
    BEGIN
        SET NOCOUNT ON;
    
        SET DATEFIRST 1;
    
        SET @Fecha_Primer_Dia_Clases =	 
    	   CASE
    		  WHEN @Fecha <= @Fecha_Comienzo THEN @Fecha_Comienzo
    		  ELSE
    			 DATEADD(DAY, 
    				CASE 
    				    WHEN DATEPART(WEEKDAY, @Fecha) BETWEEN 1 AND 4 THEN 1
    				    ELSE (8 - DATEPART(WEEKDAY, @Fecha))
    				END, 
    			 @Fecha)
    	   END
    
        INSERT INTO dbo.Matriculas_Tabla 
        SELECT    
    	   @Num_Matricula,	
    	   @Fecha,
    	   @Num_Estudiante,
    	   @Termino,
    	   @Semestre,
    	   @Candidato_Graduacion,
    	   @Fecha_Comienzo,
    	   @Departamento,
    	   @Curso,
    	   @Fecha_Primer_Dia_Clases,
    	   @Ultima_Asistencia    
    END
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 14:50

Todas las respuestas

  • Hola.

    ¿Qué problema se te presenta en este caso?

    Es decir, no es claro lo que te sucede o qué problema estás teniendo para ayudarte.

    Saludos,


    Guillermo Taylor F.
    MVP Data Platform & IT Pro
    Mi Blog

    viernes, 9 de diciembre de 2016 11:32
  • Efrain Diaz,

    Pienso que el valor de cada parámetro debería ser calculado desde la aplicación cliente (llámese capa de lógica de negocios), el procedimiento almacenado debería persistir -en la tabla- los argumentos enviados. En caso requieras hacerlo desde el procedimiento almacenado puedes hacer lo siguiente:

    CREATE PROCEDURE dbo.SP_INSERTAR_MATRICULA
        @Num_Matricula int,	
        @Fecha date,
        @Num_Estudiante	nvarchar(10),
        @Termino nvarchar(10),
        @Semestre int,
        @Candidato_Graduacion bit,
        @Fecha_Comienzo date,
        @Departamento int,
        @Curso int,
        @Fecha_Primer_Dia_Clases date,
        @Ultima_Asistencia date
    AS
    BEGIN
        SET NOCOUNT ON;
    
        SET DATEFIRST 1;
    
        SET @Fecha_Primer_Dia_Clases =	 
    	   CASE
    		  WHEN @Fecha <= @Fecha_Comienzo THEN @Fecha_Comienzo
    		  ELSE
    			 DATEADD(DAY, 
    				CASE 
    				    WHEN DATEPART(WEEKDAY, @Fecha) BETWEEN 1 AND 4 THEN 1
    				    ELSE (8 - DATEPART(WEEKDAY, @Fecha))
    				END, 
    			 @Fecha)
    	   END
    
        INSERT INTO dbo.Matriculas_Tabla 
        SELECT    
    	   @Num_Matricula,	
    	   @Fecha,
    	   @Num_Estudiante,
    	   @Termino,
    	   @Semestre,
    	   @Candidato_Graduacion,
    	   @Fecha_Comienzo,
    	   @Departamento,
    	   @Curso,
    	   @Fecha_Primer_Dia_Clases,
    	   @Ultima_Asistencia    
    END
    GO


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 14:50