Я пытаюсь настроить хранимую процедуру, которая может обновлять записи, где может измениться связь внешнего ключа в родительских и дочерних отношениях. Это вредит моему мозгу, поэтому любая помощь будет любезно оценена.
Чтобы упростить задачу, я изменил данные на отношения ученик-класс - поэтому, пожалуйста, не обращайте внимания на тот факт, что пример немного неуместен и плохо спроектирован.
В моей задаче , У меня была бы таблица Classes
- и по какой-то причине класс должен дублироваться (см. Таблицу классов):
Вы можете видеть, что добавляется желтый класс INF110, а код предмета остается прежним.
Теперь у меня есть хранимая процедура для добавления учащихся в предмет INF110
, и когда это происходит ... если он обнаруживает дублирующий код предмета, он добавляет две записи в таблицу учеников следующим образом:
Как видите, две записи Peter
были добавлено в таблицу Student
.
Моя проблема заключается в том, что я пытаюсь создать хранимую процедуру для управления обновлениями для учащихся на основе следующих случаев использования;
- Необходимо обновить имя студента, где идентификатор студента = A
- Необходимо изменить зарегистрированный предмет студента с одного на другой.
Первый вариант использования для поддержки обновления будет выглядеть примерно так:
UPDATE Student
SET ClassId = C.ClassId,
StudentName = 'Peter James'
FROM
(SELECT ClassId FROM Student WHERE SubjectCode = @subjectCode) C
LEFT JOIN
Student S ON C.ClassId = S.ClassId
WHERE StudentId = 'A';
Для второго сценария (изменение класса) это будет означать, что ученик А (Питер) хотел бы изменить с INF110
на ACC110
. Однако, как вы можете видеть, в этот момент (из-за дублированного класса INF110) он существует дважды в таблице Student
. В этом случае запись S2 в Student
должна быть удалена, а запись S1 должна быть связана с классом C3 вместо C1.
Любая помощь будет оценена. Я могу добавить свою текущую хранимую процедуру, но чувствую, что она запутает еще больше.