USP_DATAFORMTEMPLATE_ADD_STUDENTMARKINGCOLUMNGRADERECORDS
The save procedure used by the add dataform template "Student Marking Column Grade Add Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | INOUT | The output parameter indicating the ID of the record added. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@GRADES | xml | IN |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_ADD_STUDENTMARKINGCOLUMNGRADERECORDS
(
@ID uniqueidentifier = null output,
@CHANGEAGENTID uniqueidentifier = null,
@GRADES xml = null
)
as
set nocount on;
--We're not actually using ID so we don't need to set it.
--if @ID is null set @ID = newid()
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
declare @emptyGuid uniqueidentifier = '00000000-0000-0000-0000-000000000000'
--Insert new grades
--We're inserting all items from the incoming GradesXML that don't already have a StudentMarkingColumnGradeID.
Insert into dbo.STUDENTMARKINGCOLUMNGRADE
(TRANSLATIONTABLEGRADEID,
NUMERICGRADE,
STUDENTCLASSMEETINGGROUPID,
COURSEGRADINGMARKINGCOLUMNID,
GRADETYPECODE,
ADDEDBYID,
CHANGEDBYID,
DATEADDED,
DATECHANGED)
(select
case TRANSLATIONTABLEGRADEID when @emptyGuid then null else TRANSLATIONTABLEGRADEID end,
NUMERICGRADE,
STUDENTCLASSMEETINGGROUPID,
COURSEGRADINGMARKINGCOLUMNID,
GRADETYPECODE,
@CHANGEAGENTID AS 'ADDEDBYID',
@CHANGEAGENTID AS 'CHANGEDBYID',
@CURRENTDATE AS 'DATEADDED',
@CURRENTDATE AS 'DATECHANGED'
from (select
T.c.value('(STUDENTMARKINGCOLUMNGRADEID)[1]','uniqueidentifier') STUDENTMARKINGCOLUMNGRADEID,
T.c.value('(TRANSLATIONTABLEGRADEID)[1]','uniqueidentifier') TRANSLATIONTABLEGRADEID,
T.c.value('(NUMERICGRADE)[1]','numeric(14, 2)') NUMERICGRADE,
T.c.value('(STUDENTCLASSMEETINGGROUPID)[1]','uniqueidentifier') STUDENTCLASSMEETINGGROUPID,
T.c.value('(COURSEGRADINGMARKINGCOLUMNID)[1]','uniqueidentifier') COURSEGRADINGMARKINGCOLUMNID,
T.c.value('(GRADETYPECODE)[1]','tinyint') GRADETYPECODE
from @GRADES.nodes('/GRADES/ITEM') T(c)) GRADESDATA
where (GRADESDATA.STUDENTMARKINGCOLUMNGRADEID is null) or (GRADESDATA.STUDENTMARKINGCOLUMNGRADEID = @emptyGuid))
--Update existing grades
update g
set
g.TRANSLATIONTABLEGRADEID = case GRADESDATA.TRANSLATIONTABLEGRADEID when @emptyGuid then null else GRADESDATA.TRANSLATIONTABLEGRADEID end,
g.NUMERICGRADE = GRADESDATA.NUMERICGRADE,
g.GRADETYPECODE = GRADESDATA.GradeTypeCode,
g.CHANGEDBYID = @CHANGEAGENTID,
g.DATECHANGED = @CURRENTDATE,
--If grade was previously blank, update the DateAdded with today, otherwise just reselect the original date added so we don't change the value.
g.DATEADDED = case when g.GRADEISBLANK = 1 and (GRADESDATA.TRANSLATIONTABLEGRADEID <> @emptyGuid or GRADESDATA.NUMERICGRADE <> -1) then @CURRENTDATE else g.DATEADDED end
from (select
T.c.value('(STUDENTMARKINGCOLUMNGRADEID)[1]','uniqueidentifier') STUDENTMARKINGCOLUMNGRADEID,
T.c.value('(TRANSLATIONTABLEGRADEID)[1]','uniqueidentifier') TRANSLATIONTABLEGRADEID,
T.c.value('(NUMERICGRADE)[1]','numeric(14, 2)') NUMERICGRADE,
T.c.value('(GRADETYPECODE)[1]','tinyint') GRADETYPECODE
from @GRADES.nodes('/GRADES/ITEM') T(c)) GRADESDATA
inner join dbo.STUDENTMARKINGCOLUMNGRADE g on GRADESDATA.STUDENTMARKINGCOLUMNGRADEID = g.ID
where (GRADESDATA.STUDENTMARKINGCOLUMNGRADEID is not null) and (GRADESDATA.STUDENTMARKINGCOLUMNGRADEID <> @emptyGuid)
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0