sql BIT / IAM-1793 - Las observaciones se insertaban en NULL。 Se cambia para insertar las observac
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql BIT / IAM-1793 - Las observaciones se insertaban en NULL。 Se cambia para insertar las observac相关的知识,希望对你有一定的参考价值。
----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spImportarCalificaciones', 'P') IS NOT NULL
DROP PROC spImportarCalificaciones
GO
CREATE PROCEDURE [dbo].[spImportarCalificaciones]
@sCodigoTemporales VARCHAR(32) ,
@inscAd INT OUTPUT ,
@inscAc INT OUTPUT ,
@cals INT OUTPUT ,
@calsBorradas INT OUTPUT ,
@equivs INT OUTPUT ,
@estatusTray INT OUTPUT ,
@equivsExists INT OUTPUT
/* --------------------------------------------------------------------------------------------------------------
FECHA | AUTOR | DESCRIPCION
05/Abr/2017 | Luis Bernal | Modificación de query en bloque "Existe Inscripc Administrativa"
18/Abr/2017 | Luis Bernal | Adcición de cálculo y retorno de Equivalencias anteriormente registradas
20/Jun/2017 | Luis Bernal | Adición de Observaciones especificadas en archivo de importación y que se deben registrar en Ctrl_TrayectoriaAcademicaDet
--------------------------------------------------------------------------------------------------------------*/
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CalifsAImportar TABLE
(
iFolioTrayectoria BIGINT ,
idEvaluacion SMALLINT ,
idEstatus TINYINT ,
dCalificacion DECIMAL(7, 3) ,
idUsuario INT ,
sObservaciones VARCHAR(1000) ,
dFechaRegistro DATETIME ,
bHistorica BIT
);
DECLARE @sCodigoTemporales_ VARCHAR(32) ,
@inscAd_ INT ,
@inscAc_ INT ,
@cals_ INT ,
@cals_Borradas_ INT ,
@equivs_ INT ,
@equivsExists_ INT ,
@equivsExistsAcum INT ,
@estatusTray_ INT ,
@sEtEquivalencia VARCHAR(10) ,
@sEtExam VARCHAR(10);
SET @sEtEquivalencia = 'EQ';
SET @sEtExam = 'EG';
SET @sCodigoTemporales_ = @sCodigoTemporales;
SET @inscAd_ = 0;
SET @inscAc_ = 0;
SET @cals_ = 0;
SET @cals_Borradas_ = 0;
SET @equivs_ = 0;
SET @equivsExists_ = 0;
SET @equivsExistsAcum = 0;
--************ EXISTE ACADEMICA
--BORRA IMPORTACIONES ANTERIORES
DELETE acadet
FROM Ctrl_TrayectoriaAcademicaDet acadet
INNER JOIN Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp ON acadettmp.iFolioTrayectoriaReal = acadet.iFolioTrayectoria
AND acadettmp.idEvaluacion = acadet.idEvaluacion
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.bImportable = 1
AND acadet.bHistorica = 1
AND ( acadettmp.sObservacionesArchivo IS NULL
OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
AND acadettmp.sObservacionesArchivo != @sEtExam
)
);
SELECT @cals_Borradas_ = @cals_Borradas_ + @@ROWCOUNT;
--CALIFS
INSERT @CalifsAImportar
SELECT acad.iFolio ,
acadettmp.idEvaluacion ,
acadettmp.idEstatus ,
acadettmp.dCalificacion ,
acadettmp.idUsuario ,
acadettmp.sObservaciones , -- 20/Jun/2017 - BIT/IAM-1793 - Las observaciones se insertaban en NULL. Se cambia para insertar las observaciones especificadas en Ctrl_TrayectoriaAcademicaDetTmpCalif
acadettmp.dFechaReg ,
1
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolio = acadettmp.iFolioTrayectoriaReal
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.bImportable = 1
AND ( acad.iOrden IS NULL
OR acad.iOrden = 1
)
AND ( acadettmp.sObservacionesArchivo IS NULL
OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
AND acadettmp.sObservacionesArchivo != @sEtExam
)
)
INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acad.iFolioInscripcion
--solo no existentes
LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
AND acadet.idEvaluacion = acadettmp.idEvaluacion
WHERE acadet.iFolioTrayectoria IS NULL;
WITH noDuplicados
AS ( SELECT califsImp.iFolioTrayectoria ,
califsImp.idEvaluacion ,
califsImp.idEstatus ,
califsImp.dCalificacion ,
califsImp.idUsuario ,
califsImp.sObservaciones ,
califsImp.dFechaRegistro ,
califsImp.bHistorica ,
ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
FROM @CalifsAImportar califsImp
)
INSERT Ctrl_TrayectoriaAcademicaDet
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
idUsuario ,
sObservaciones ,
dFechaReg ,
bHistorica
)
SELECT noDuplicados.iFolioTrayectoria ,
noDuplicados.idEvaluacion ,
noDuplicados.idEstatus ,
noDuplicados.dCalificacion ,
noDuplicados.idUsuario ,
noDuplicados.sObservaciones ,
noDuplicados.dFechaRegistro ,
noDuplicados.bHistorica
FROM noDuplicados
WHERE noDuplicados.no_row = 1;
SELECT @cals_ = @cals_ + @@ROWCOUNT;
--EQUIVALENCIA NO APLICA CUANDO HAY INSC ACADEMICA
INSERT Ctrl_TrayectoriaAcademicaDetHistorialImp
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
sObservaciones ,
dFechaAcreditacion ,
sCodigo ,
idUsuario ,
dFecha
)
SELECT califsImp.iFolioTrayectoria ,
califsImp.idEvaluacion ,
califsImp.idEstatus ,
califsImp.dCalificacion ,
califsImp.sObservaciones ,
califsImp.dFechaRegistro ,
@sCodigoTemporales_ ,
califsImp.idUsuario ,
GETDATE()
FROM @CalifsAImportar califsImp;
--=================================================================================================================================================================================================================================
--**********EXISTE ADMINISTRATIVA
-----------------CREAR ACADÉMICA
INSERT Ctrl_TrayectoriaAcademica
( idGrupo ,
idAsignatura ,
idPlanEstudios ,
iFolioInscripcion ,
iOrden ,
iTipoResultado ,
bHistorica
)
SELECT acadtmp.idGrupo ,
acadtmp.idAsignatura ,
acadtmp.idPlanEstudios ,
acadtmp.iFolioInscripcionReal ,
1 ,
acadtmp.iTipoResultado ,
1
FROM Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
AND acadtmp.sCodigo = @sCodigoTemporales_
--solo no existentes
LEFT JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
AND acad.idAsignatura = acadtmp.idAsignatura
AND acad.idGrupo = acadtmp.idGrupo -- Se agrega condición para crear de manera adecuada la Inscrip Academica - BIT/IAM-1410 - 05/Abr/2017
WHERE acad.iFolio IS NULL
AND EXISTS ( SELECT acadetmp.iFolioTrayectoria
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadetmp
WHERE acadetmp.iFolioTrayectoria = acadtmp.iFolio
AND acadetmp.bImportable = 1
AND ( acadetmp.sObservacionesArchivo IS NULL
OR ( acadetmp.sObservacionesArchivo != @sEtEquivalencia
AND acadetmp.sObservacionesArchivo != @sEtExam
)
) );
SELECT @inscAc_ = @inscAc_ + @@ROWCOUNT;
-----------------CALIFS
DELETE FROM @CalifsAImportar;
INSERT @CalifsAImportar
SELECT acad.iFolio ,
acadettmp.idEvaluacion ,
acadettmp.idEstatus ,
acadettmp.dCalificacion ,
acadettmp.idUsuario ,
NULL ,
acadettmp.dFechaReg ,
1
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo IS NULL
OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
AND acadettmp.sObservacionesArchivo != @sEtExam
)
)
INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
AND acad.bHistorica = 1
AND acad.idAsignatura = acadtmp.idAsignatura
AND acad.idGrupo = acadtmp.idGrupo
AND acad.idPlanEstudios = acadtmp.idPlanEstudios
AND acad.iOrden = 1
--solo no existentes
LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
AND acadet.idEvaluacion = acadettmp.idEvaluacion
--AND ( acadet.bHistorica IS NULL
-- OR acadet.bHistorica = 0 )
WHERE acadet.iFolioTrayectoria IS NULL;
WITH noDuplicados
AS ( SELECT califsImp.iFolioTrayectoria ,
califsImp.idEvaluacion ,
califsImp.idEstatus ,
califsImp.dCalificacion ,
califsImp.idUsuario ,
califsImp.sObservaciones ,
califsImp.dFechaRegistro ,
califsImp.bHistorica ,
ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
FROM @CalifsAImportar califsImp
)
INSERT Ctrl_TrayectoriaAcademicaDet
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
idUsuario ,
sObservaciones ,
dFechaReg ,
bHistorica
)
SELECT noDuplicados.iFolioTrayectoria ,
noDuplicados.idEvaluacion ,
noDuplicados.idEstatus ,
noDuplicados.dCalificacion ,
noDuplicados.idUsuario ,
noDuplicados.sObservaciones ,
noDuplicados.dFechaRegistro ,
noDuplicados.bHistorica
FROM noDuplicados
WHERE noDuplicados.no_row = 1;
SELECT @cals_ = @cals_ + @@ROWCOUNT;
INSERT Ctrl_TrayectoriaAcademicaDetHistorialImp
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
sObservaciones ,
dFechaAcreditacion ,
sCodigo ,
idUsuario ,
dFecha
)
SELECT califsImp.iFolioTrayectoria ,
califsImp.idEvaluacion ,
califsImp.idEstatus ,
califsImp.dCalificacion ,
califsImp.sObservaciones ,
califsImp.dFechaRegistro ,
@sCodigoTemporales_ ,
califsImp.idUsuario ,
GETDATE()
FROM @CalifsAImportar califsImp;
-----------------equivalencias
WITH califUnica
AS ( SELECT acadtmp.idAsignatura ,
acadettmp.dCalificacion ,
GETDATE() AS dFecha ,
CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
END AS sDictamen ,
acadettmp.idEstatus ,
acadettmp.idUsuario ,
ins.idAlumno ,
acadtmp.idPlanEstudios ,
'Equivalencia histórica creada por importación masiva' AS sObsEq ,
acadettmp.dFechaReg ,
ins.iFolioPeriodo ,
ROW_NUMBER() OVER ( PARTITION BY ins.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadtmp.iFolioInscripcionReal IS NOT NULL
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
OR acadettmp.sObservacionesArchivo = @sEtExam
)
INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
)
INSERT Ctrl_Equivalencias
( idAsignatura ,
dCalificacion ,
dFecha ,
sDictamen ,
idEstatus ,
idUsuario ,
idAlumno ,
idPlanEstudios ,
sDescripcion ,
dFechaAcreditacion ,
iFolioPeriodo
)
SELECT idAsignatura ,
dCalificacion ,
dFecha ,
sDictamen ,
idEstatus ,
idUsuario ,
idAlumno ,
idPlanEstudios ,
sObsEq ,
califUnica.dFechaReg ,
iFolioPeriodo
FROM califUnica
WHERE no_row = 1
AND NOT EXISTS ( SELECT eq.idAlumno
FROM Ctrl_Equivalencias eq
WHERE eq.idAlumno = califUnica.idAlumno
AND eq.idAsignatura = califUnica.idAsignatura
AND eq.idPlanEstudios = califUnica.idPlanEstudios )
AND NOT EXISTS ( SELECT acad.iFolio
FROM Ctrl_TrayectoriaAcademica acad
INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = califUnica.idAlumno
AND ins.iFolio = acad.iFolioInscripcion
AND acad.idAsignatura = califUnica.idAsignatura
AND acad.idPlanEstudios = califUnica.idPlanEstudios );
SELECT @equivs_ = @equivs_ + @@ROWCOUNT;
--// ======= EQUIVALENCIAS EXISTENTES ===== //-- Agregado para contabilizar y mostrar las equivalencias detectadas en el archivo importado que ya estaban registradas
SELECT @equivsExists_ = COUNT(*)
FROM
(SELECT acadtmp.idAsignatura ,
acadettmp.dCalificacion ,
GETDATE() AS dFecha ,
CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
END AS sDictamen ,
acadettmp.idEstatus ,
acadettmp.idUsuario ,
ins.idAlumno ,
acadtmp.idPlanEstudios ,
'Equivalencia histórica creada por importación masiva' AS sObsEq ,
acadettmp.dFechaReg ,
ins.iFolioPeriodo ,
ROW_NUMBER() OVER ( PARTITION BY ins.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadtmp.iFolioInscripcionReal IS NOT NULL
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
OR acadettmp.sObservacionesArchivo = @sEtExam
)
INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
) califUnica
JOIN dbo.Ctrl_Equivalencias eq ON eq.idAlumno = califUnica.idAlumno
AND eq.idAsignatura = califUnica.idAsignatura
AND eq.idPlanEstudios = califUnica.idPlanEstudios
SET @equivsExistsAcum = @equivsExistsAcum + @equivsExists_;
--// ===================================== //--
--=================================================================================================================================================================================================================================
--**********NO EXISTEN INSCRIPCIONES
----------------- CREAR ADMINISTRATIVA
INSERT Ctrl_Inscripciones
( iFolioPeriodo ,
iNoPeriodo ,
idPlantel ,
idOfEduc ,
idEstatusInsc ,
idAlumno ,
idUsuario ,
idTipoHorario ,
bReinscripcion ,
dFecha ,
bRecargos ,
dBeca ,
bActivo ,
mColegiatura ,
mSobrecarga ,
dFechaEstatus ,
sObsEstatus ,
idUsuarioEstatus ,
bHistorica
)
SELECT instmp.iFolioPeriodo ,
1 AS iNoPeriodo ,
instmp.idPlantel ,
instmp.idOfEduc ,
instmp.idEstatusInsc ,
instmp.idAlumno ,
instmp.idUsuario ,
instmp.idTipoHorario ,
1 AS bReinscripcion ,
instmp.dFecha ,
1 AS bRecargos ,
0 AS dBeca ,
1 AS bActivo ,
0 AS mColegiatura ,
0 AS mSobrecarga ,
instmp.dFecha AS dFechaEstatus ,
'Inscripción histórica creada por importación de calificaciones' ,
instmp.idUsuario ,
1 AS bHistorica
FROM Ctrl_InscripcionesTmpCalif instmp --solo no existentes
LEFT JOIN Ctrl_Inscripciones ins2 ON ins2.idAlumno = instmp.idAlumno
AND ins2.iFolioPeriodo = instmp.iFolioPeriodo
AND ins2.idPlantel = instmp.idPlantel
AND ins2.idOfEduc = instmp.idOfEduc
-- AND ins2.bHistorica = 0
WHERE instmp.sCodigo = @sCodigoTemporales_
AND ins2.iFolio IS NULL
AND EXISTS ( SELECT acadtmp.iFolio
FROM Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
INNER JOIN Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp ON acadtmp.iFolioInscripcion = instmp.iFolio
AND acadettmp.iFolioTrayectoria = acadtmp.iFolio
AND ( acadettmp.sObservacionesArchivo IS NULL
OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
AND acadettmp.sObservacionesArchivo != @sEtExam
)
) ); -- filtra equivalencias
SELECT @inscAd_ = @inscAd_ + @@ROWCOUNT;
-----------------CREAR ACADÉMICA
INSERT Ctrl_TrayectoriaAcademica
( idGrupo ,
idAsignatura ,
idPlanEstudios ,
iFolioInscripcion ,
iOrden ,
iTipoResultado ,
bHistorica
)
SELECT acadtmp.idGrupo ,
acadtmp.idAsignatura ,
acadtmp.idPlanEstudios ,
ins.iFolio ,
1 ,
acadtmp.iTipoResultado ,
1
FROM Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON acadtmp.sCodigo = @sCodigoTemporales_
AND acadtmp.sCodigo = instmp.sCodigo
AND instmp.iFolio = acadtmp.iFolioInscripcion
INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = instmp.idAlumno
AND ins.iFolioPeriodo = instmp.iFolioPeriodo
AND ins.idPlantel = instmp.idPlantel
AND ins.idOfEduc = instmp.idOfEduc
AND ins.bHistorica = 1
AND ins.idUsuario = instmp.idUsuario
--solo no existentes
LEFT JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
AND acad.idPlanEstudios = acadtmp.idPlanEstudios
AND acad.idAsignatura = acadtmp.idAsignatura
WHERE acad.iFolio IS NULL
AND EXISTS ( SELECT acadetmp.iFolioTrayectoria
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadetmp
WHERE acadetmp.iFolioTrayectoria = acadtmp.iFolio
AND acadetmp.bImportable = 1
AND ( acadetmp.sObservacionesArchivo IS NULL
OR ( acadetmp.sObservacionesArchivo != @sEtEquivalencia
AND acadetmp.sObservacionesArchivo != @sEtExam
)
) );
SELECT @inscAc_ = @inscAc_ + @@ROWCOUNT;
-----------------CALIFS
DELETE FROM @CalifsAImportar;
INSERT @CalifsAImportar
SELECT acad.iFolio ,
acadettmp.idEvaluacion ,
acadettmp.idEstatus ,
acadettmp.dCalificacion ,
acadettmp.idUsuario ,
NULL ,
acadettmp.dFechaReg ,
1
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo IS NULL
OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
AND acadettmp.sObservacionesArchivo != @sEtExam
)
)
INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON instmp.sCodigo = acadtmp.sCodigo
AND instmp.iFolio = acadtmp.iFolioInscripcion
INNER JOIN Ctrl_Inscripciones ins -- ON ins.iFolio = acadtmp.iFolioInscripcionReal
ON ins.idAlumno = instmp.idAlumno
AND ins.iFolioPeriodo = instmp.iFolioPeriodo
AND ins.idPlantel = instmp.idPlantel
AND ins.idOfEduc = instmp.idOfEduc
AND ins.bHistorica = 1
AND ins.dFecha = instmp.dFecha
AND ins.idUsuario = instmp.idUsuario
INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
AND acad.bHistorica = 1
AND acad.idAsignatura = acadtmp.idAsignatura
AND acad.idGrupo = acadtmp.idGrupo
AND acad.idPlanEstudios = acadtmp.idPlanEstudios
AND acad.iOrden = 1
--solo no existentes
LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
AND acadet.idEvaluacion = acadettmp.idEvaluacion
--AND ( acadet.bHistorica IS NULL
-- OR acadet.bHistorica = 0 )
WHERE acadet.iFolioTrayectoria IS NULL;
WITH noDuplicados
AS ( SELECT califsImp.iFolioTrayectoria ,
califsImp.idEvaluacion ,
califsImp.idEstatus ,
califsImp.dCalificacion ,
califsImp.idUsuario ,
califsImp.sObservaciones ,
califsImp.dFechaRegistro ,
califsImp.bHistorica ,
ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
FROM @CalifsAImportar califsImp
)
INSERT Ctrl_TrayectoriaAcademicaDet
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
idUsuario ,
sObservaciones ,
dFechaReg ,
bHistorica
)
SELECT noDuplicados.iFolioTrayectoria ,
noDuplicados.idEvaluacion ,
noDuplicados.idEstatus ,
noDuplicados.dCalificacion ,
noDuplicados.idUsuario ,
noDuplicados.sObservaciones ,
noDuplicados.dFechaRegistro ,
noDuplicados.bHistorica
FROM noDuplicados
WHERE noDuplicados.no_row = 1;
SELECT @cals_ = @cals_ + @@ROWCOUNT;
INSERT Ctrl_TrayectoriaAcademicaDetHistorialImp
( iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
sObservaciones ,
dFechaAcreditacion ,
sCodigo ,
idUsuario ,
dFecha
)
SELECT iFolioTrayectoria ,
idEvaluacion ,
idEstatus ,
dCalificacion ,
sObservaciones ,
dFechaRegistro ,
@sCodigoTemporales_ ,
idUsuario ,
GETDATE()
FROM @CalifsAImportar;
-----------------equivalencias
;
WITH califUnica
AS ( SELECT acadtmp.idAsignatura ,
acadettmp.dCalificacion ,
GETDATE() AS dFecha ,
CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
END AS sDictamen ,
acadettmp.idEstatus ,
acadettmp.idUsuario ,
instmp.idAlumno ,
acadtmp.idPlanEstudios ,
'Equivalencia histórica creada por importación masiva' AS sObsEq ,
acadettmp.dFechaReg ,
instmp.iFolioPeriodo ,
ROW_NUMBER() OVER ( PARTITION BY instmp.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadtmp.iFolioInscripcionReal IS NULL
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
OR acadettmp.sObservacionesArchivo = @sEtExam
)
INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON instmp.sCodigo = acadtmp.sCodigo
AND instmp.iFolio = acadtmp.iFolioInscripcion
)
INSERT Ctrl_Equivalencias
( idAsignatura ,
dCalificacion ,
dFecha ,
sDictamen ,
idEstatus ,
idUsuario ,
idAlumno ,
idPlanEstudios ,
sDescripcion ,
dFechaAcreditacion ,
iFolioPeriodo
)
SELECT idAsignatura ,
dCalificacion ,
dFecha ,
sDictamen ,
idEstatus ,
idUsuario ,
idAlumno ,
idPlanEstudios ,
sObsEq ,
califUnica.dFechaReg ,
iFolioPeriodo
FROM califUnica
WHERE no_row = 1
AND NOT EXISTS ( SELECT eq.idAlumno
FROM Ctrl_Equivalencias eq
WHERE eq.idAlumno = califUnica.idAlumno
AND eq.idAsignatura = califUnica.idAsignatura
AND eq.idPlanEstudios = califUnica.idPlanEstudios )
AND NOT EXISTS ( SELECT acad.iFolio
FROM Ctrl_TrayectoriaAcademica acad
INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = califUnica.idAlumno
AND ins.iFolio = acad.iFolioInscripcion
AND acad.idAsignatura = califUnica.idAsignatura
AND acad.idPlanEstudios = califUnica.idPlanEstudios );
SELECT @equivs_ = @equivs_ + @@ROWCOUNT;
--// ======= EQUIVALENCIAS EXISTENTES ===== //-- Agregado para contabilizar y mostrar las equivalencias detectadas en el archivo importado que ya estaban registradas
SELECT @equivsExists_ = COUNT(*)
FROM
(SELECT acadtmp.idAsignatura ,
acadettmp.dCalificacion ,
GETDATE() AS dFecha ,
CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
END AS sDictamen ,
acadettmp.idEstatus ,
acadettmp.idUsuario ,
instmp.idAlumno ,
acadtmp.idPlanEstudios ,
'Equivalencia histórica creada por importación masiva' AS sObsEq ,
acadettmp.dFechaReg ,
instmp.iFolioPeriodo ,
ROW_NUMBER() OVER ( PARTITION BY instmp.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
FROM Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
AND acadtmp.iFolioInscripcionReal IS NULL
AND acadettmp.sCodigo = @sCodigoTemporales_
AND acadettmp.sCodigo = acadtmp.sCodigo
AND acadettmp.bImportable = 1
AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
OR acadettmp.sObservacionesArchivo = @sEtExam
)
INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON instmp.sCodigo = acadtmp.sCodigo
AND instmp.iFolio = acadtmp.iFolioInscripcion
) califUnica
JOIN dbo.Ctrl_Equivalencias eq ON eq.idAlumno = califUnica.idAlumno
AND eq.idAsignatura = califUnica.idAsignatura
AND eq.idPlanEstudios = califUnica.idPlanEstudios
SET @equivsExistsAcum = @equivsExistsAcum + @equivsExists_;
--// ===================================== //--
--=================================================================================================================================================================================================================================
-----******** ITIPORESULTADO
DECLARE @idFormEval SMALLINT;
SELECT TOP 1
@idFormEval = ev.idFormEvaluacion
FROM ( SELECT TOP 1
*
FROM Ctrl_TrayectoriaAcademicaDetHistorialImp historial
WHERE sCodigo = @sCodigoTemporales_
) cals
INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolio = cals.iFolioTrayectoria
INNER JOIN Ctrl_PlanEstudios planestdet ON planestdet.idPlanEstudios = acad.idPlanEstudios
AND planestdet.idAsignatura = acad.idAsignatura
INNER JOIN Cat_PlanEstudios planest ON planest.idPlanEstudios = planestdet.idPlanEstudios
INNER JOIN Cat_FormEvaluacion ev ON ev.idFormEvaluacion = CASE WHEN planestdet.idFormEvaluacion IS NOT NULL THEN planestdet.idFormEvaluacion
ELSE planest.idFormEvaluacion
END;
--evaluaciones
DECLARE @TEvOr TABLE
(
idFormEvaluacion SMALLINT PRIMARY KEY ,
bTaller BIT ,
idEvaluacion SMALLINT ,
iOrden TINYINT ,
bExtraordinaria BIT ,
dMinimaAprobatoria DECIMAL(7, 3)
);
INSERT @TEvOr
SELECT T1.idFormEvaluacion ,
T3.bTaller ,
T2.idEvaluacion ,
T2.iOrden ,
T2.bExtraordinaria ,
T3.dMinimaAprobatoria
FROM ( SELECT ev.idFormEvaluacion ,
MAX(iOrden) AS iOrdenMax
FROM Ctrl_FormEvaluacion ev
WHERE ev.idFormEvaluacion = @idFormEval
AND bExtraordinaria = 0
GROUP BY ev.idFormEvaluacion
) T1
INNER JOIN Ctrl_FormEvaluacion T2 ON T2.idFormEvaluacion = T1.idFormEvaluacion
AND T2.iOrden = T1.iOrdenMax
INNER JOIN Cat_FormEvaluacion T3 ON T3.idFormEvaluacion = T1.idFormEvaluacion;
DECLARE @evalsUtiles TABLE
(
iFolioTrayectoria BIGINT ,
idEvaluacion SMALLINT ,
idEstatus TINYINT ,
dCalificacion DECIMAL(7, 3) ,
bExtra BIT
);
INSERT @evalsUtiles
SELECT historial.iFolioTrayectoria ,
historial.idEvaluacion ,
historial.idEstatus ,
historial.dCalificacion ,
0
FROM Ctrl_TrayectoriaAcademicaDetHistorialImp historial
INNER JOIN @TEvOr ord ON historial.sCodigo = @sCodigoTemporales_
AND ord.idEvaluacion = historial.idEvaluacion
WHERE NOT EXISTS ( SELECT historialExtras.iFolioTrayectoria
FROM Ctrl_TrayectoriaAcademicaDetHistorialImp historialExtras
INNER JOIN Ctrl_FormEvaluacion evals ON historialExtras.sCodigo = @sCodigoTemporales_
AND historialExtras.iFolioTrayectoria = historial.iFolioTrayectoria
AND evals.idEvaluacion = historialExtras.idEvaluacion
AND evals.bExtraordinaria = 1 );
WITH evalsExtra
AS ( SELECT historial.* ,
ROW_NUMBER() OVER ( PARTITION BY historial.iFolioTrayectoria ORDER BY evals.iOrden DESC ) AS no_row
FROM Ctrl_TrayectoriaAcademicaDetHistorialImp historial
INNER JOIN Ctrl_FormEvaluacion evals ON historial.sCodigo = @sCodigoTemporales_
AND evals.idEvaluacion = historial.idEvaluacion
INNER JOIN @TEvOr ord ON ord.idFormEvaluacion = evals.idFormEvaluacion
AND ord.idEvaluacion <> historial.idEvaluacion
AND ord.iOrden < evals.iOrden
)
INSERT @evalsUtiles
SELECT evalsExtra.iFolioTrayectoria ,
evalsExtra.idEvaluacion ,
evalsExtra.idEstatus ,
evalsExtra.dCalificacion ,
1
FROM evalsExtra
WHERE evalsExtra.no_row = 1;
--regular_cursando = 0,
--exento = 1,
--repruebaOblig = 2,
--apruebaOblig = 3,
--repruebaExtra = 4,
--apruebaExtra = 5,
--repruebaFaltas = 6
UPDATE acad
SET acad.iTipoResultado = T1.iTipoResultado
FROM Ctrl_TrayectoriaAcademica acad
INNER JOIN ( SELECT ultimasEvals.iFolioTrayectoria ,
ultimasEvals.dCalificacion ,
estatus.sAbreviatura ,
estatus.bAprobado ,
ord.dMinimaAprobatoria ,
CAST (CASE WHEN estatus.bAprobado IS NOT NULL
THEN CASE WHEN estatus.bAprobado = 0 THEN CASE WHEN ultimasEvals.bExtra = 0 THEN 2
ELSE 4
END
ELSE CASE WHEN ultimasEvals.bExtra = 0 THEN 3
ELSE 5
END
END
ELSE CASE WHEN ultimasEvals.dCalificacion >= ord.dMinimaAprobatoria THEN CASE WHEN ultimasEvals.bExtra = 0 THEN 3
ELSE 5
END
ELSE CASE WHEN ultimasEvals.bExtra = 0 THEN 2
ELSE 4
END
END
END AS TINYINT) AS iTipoResultado
FROM @evalsUtiles ultimasEvals
CROSS APPLY @TEvOr ord
LEFT JOIN Cat_EstatusEvaluacion estatus ON ultimasEvals.idEstatus IS NOT NULL
AND ultimasEvals.idEstatus = estatus.idEstatus
) T1 ON T1.iFolioTrayectoria = acad.iFolio
AND ( acad.iOrden IS NULL
OR acad.iOrden = 1
);
SELECT @estatusTray_ = @@ROWCOUNT;
SELECT @inscAd = @inscAd_;
SELECT @inscAc = @inscAc_;
SELECT @cals = @cals_;
SELECT @calsBorradas = @cals_Borradas_;
SELECT @equivs = @equivs_;
SELECT @estatusTray = @estatusTray_;
SELECT @equivsExists = @equivsExistsAcum;
END;
以上是关于sql BIT / IAM-1793 - Las observaciones se insertaban en NULL。 Se cambia para insertar las observac的主要内容,如果未能解决你的问题,请参考以下文章
sql BIT / IAM-1792 - Se adicionaelparámetroidPlantela la consulta de aulas disponibles parafi
sql BIT / IAM-1709 - Se cambia la etiqueta para CriteriodeCalificación:“CalificaciónNum&
sql BIT / IAM-2032 - INSERT INTO dbo.Cat_BitacoraUsuarios - El Tutor especificado en la incidenc
sql BIT / IAM-2081 - sp2CES_ALU_ObtenerInfoInscripVigente - Se agrega para obtener la oferta edu