Ich habe eine gespeicherte Prozedur in Microsoft SQL Server geschrieben, die sollte importieren Ergebnisse von 4Matrix und fügen Sie sie in die Results
Tabelle auf MyPortal. Es importiert Ergebnisse, jedoch sind einige von ihnen falsch.Falsche Ergebnisse von der gespeicherten Prozedur zurückgegeben?
Hier ist der Code für die gespeicherte Prozedur ImportResults
:
USE [MyPortal]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: CURRICULUM\r.richards
-- Create date: 24/10/2017
-- Description: Imports Selected Subject Results From 4Matrix into MyPortal
-- =============================================
ALTER PROCEDURE [dbo].[ImportResults]
@SubjectID int,
@ResultSet varchar(50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @StudentID int
DECLARE @Upper int = (SELECT COUNT(*) FROM Students)
DECLARE @ResultSetID int
DECLARE @ResultValue NVARCHAR(50)
DECLARE @Pointer int = 1
WHILE @Pointer <= @Upper
BEGIN
SET @StudentID = (SELECT studentID
FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY Students.studentLastName) AS rownumber,
studentID
FROM
Students) AS foo
WHERE rownumber = @Pointer)
SET @ResultSetID = (SELECT rsID
FROM ResultSets
WHERE (rsName = @ResultSet))
EXEC Get4MResult @StudentID, @SubjectID, @ResultSet, @Result = @ResultValue OUTPUT
INSERT INTO Results(resultSet, resultStudent, resultSubject, resultValue)
VALUES(@ResultSetID, @StudentID, @SubjectID, @ResultValue)
SET @Pointer = @Pointer + 1
END
END
Der Codeteil für das Verfahren 'Get4MResult' wie (bei es ist das Verfahren das Problem verursacht) folgt:
USE [MyPortal]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: CURRICULUM\r.richards
-- Create date: 24/10/2017
-- Description: Obtains Selected Result from 4Matrix Interface
-- =============================================
ALTER PROCEDURE [dbo].[Get4MResult]
@StudentID int,
@SubjectID int,
@ResultSet varchar(50),
@Result nvarchar(50) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @KeyStage INT
DECLARE @4MPupilID INT
DECLARE @4MSubjectID INT
DECLARE @4MSeriesID INT
DECLARE @YearGroup VARCHAR(50) = (SELECT MyPortal.dbo.Students.studentYear
FROM MyPortal.dbo.Students
WHERE(Students.studentID = @StudentID))
IF(@YearGroup = 'Year 10' OR @YearGroup = 'Year 11')
SET @KeyStage = 4
ELSE
SET @KeyStage = 3
SET @4MPupilID = (SELECT FOUR.dbo.Pupils.PupilID
FROM FOUR.dbo.Pupils
WHERE MIS = @StudentID)
IF(@KeyStage = 4)
SET @4MSubjectID = (SELECT MyPortal.dbo.Subjects.subjectQsiKs4
FROM MyPortal.dbo.Subjects
WHERE (MyPortal.dbo.Subjects.subjectID = @SubjectID))
ELSE
SET @4MSubjectID = (SELECT MyPortal.dbo.Subjects.subjectQsiKs3
FROM MyPortal.dbo.Subjects
WHERE (MyPortal.dbo.Subjects.subjectID = @SubjectID))
SET @4MSeriesID = (SELECT FOUR.dbo.Series.SeriesID
FROM FOUR.dbo.Series
WHERE (SeriesName = @YearGroup+' - '[email protected]))
SELECT @Result = Result
FROM FOUR.dbo.Results
WHERE (PupilID = @4MPupilID
AND SubjectID = @4MSubjectID
AND SeriesID = @4MSeriesID)
END
In der Theorie sollten nur Schüler mit 4M IDs (aus der Students Table) Ergebnisse haben. Nur KS3- und KS4-Studenten haben 4Matrix-IDs, daher sollten nur etwa 400 Ergebnisse in die Ergebnistabelle eingegeben werden, wenn ich sie ausführe.
Als ich das Skript ImportResults 1,'Spring 2017'
, es tut Import Ergebnisse wie folgt:
jedoch anstelle der ~ 400 Ergebnisse, die ich erwartet hatte, gibt es 1.080 Ergebniseinträge. Sie sind keine Duplikate, aber stattdessen habe ich festgestellt, dass einige Schüler Ergebnisse haben, die nicht existieren, und ich bin nicht sicher, wo das Skript schief gelaufen ist, um dies zu verursachen. Schau mal hier:
Dieser Student (4292) angeblich ein 'A *' hat in diesem Thema. Aber bei weiterer Überprüfung stellte ich fest, dass dieser Student nicht in KS3 oder KS4 ist und daher keine 4Matrix-ID hat. Ich bin mir also nicht sicher, woher das "A *" kommt.
Ein Ergebnis sollte nicht wurden überhaupt für diese Schüler importiert.
Ich habe den Code für beide Teile durchlaufen und kann nicht sehen, wo der Fehler auftritt?
wie können wir Ihnen helfen? – Squirrel
Welche "einige" sind falsch? Mit welchen Stichprobendaten haben Sie die Ergebnisse überprüft? Was sollten die Ergebnisse sein? IOW, mehr Details ermöglichen bessere Hilfe. – SezMe
@SezMe Entschuldigung für meine kurze Beschreibung. Ich habe jetzt das oben genannte Problem ausgearbeitet. Vielen Dank. –