Microsoft SQL Serverにストアドプロシージャを作成しました。 4Matrixのインポート結果をMyPortalのResults
テーブルに挿入する必要があります。しかし、インポート結果は間違っています。ストアドプロシージャから偽の結果が返されましたか?
ここストアドプロシージャ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
プロシージャのコード部「Get4MResult」次のように(場合、それは問題を引き起こすこのプロシージャの)である。
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
理論上は、4MのIDを持つ学生(学生テーブルからの)のみが結果を持つはずです。 KS3とKS4の学生だけが4つのマトリックスIDを持っているので、実行すると約400の結果が結果テーブルに入力されます。
私はスクリプトImportResults 1,'Spring 2017'
を実行すると、それはは、以下のようなインポート結果行います
をしかし、代わりに私が期待していた〜400の結果を、1080件の結果のエントリがあります。それらは重複ではありませんが、代わりに一部の生徒には存在しない結果があることがわかりました。これを引き起こすスクリプトがどこに間違っているのかわかりません。ここを見て:
はこの学生(4292)は、おそらくこの主題に 'A *' を有します。しかし、さらに調べると、この学生はKS3またはKS4にはいないことがわかりました。そのため、4Matrix IDはありません。だから私は 'A *'がどこから来たのか分からない。
結果がないは、この学生のために、すべてのインポートされている必要があります。
私は両方の部分のコードを実行しましたが、エラーがどこで発生しているのかわかりません。
私たちはどのようにお手伝いできますか? – Squirrel
「いくらか」は間違っていますか?どのようなサンプルデータを使用して結果を確認しましたか?結果はどうあるべきですか? IOW、より多くの詳細はより良い助けを可能にする。 – SezMe
@SezMeは私の簡単な説明のためにお詫び申し上げます。私は今、上記の問題について詳しく説明しました。ありがとう。 –