Хорошо, я новичок здесь :) Я относительно новичок в SQL и пытаюсь вставить данные в несколько таблиц. У меня есть обе вставки для работы, но я хочу, чтобы, если одна из них не удалась, ни одна из них не была зафиксирована.
Таблицы выглядят так:
студент -
StudentID - внутренний ПК,
StudentName - Varchar,
и т.д ...
Класс -
ClassID - int PK,
ClassName - varchar,
и т.д ...
StudentClass -
Студенческий билет,
ClassID,
Я пытаюсь создать нового ученика, который может принадлежать к нескольким классам. Итак, я создал таблицу учеников, чтобы разорвать отношения многие-многие. У меня есть хранимая процедура для вставки нового студента и возврата новейшего StudentID, а затем я использую этот StudentID в новой хранимой процедуре и параметр табличного значения для вставки нескольких строк в таблицу StudentClass. Это хранимые процедуры:
Создать ученика:
@FirstName varchar(20) = '',
@LastName varchar(20) = '',
@PredictedGrade char(1) = '',
@ActionPlan bit = 0,
@StudentActive bit = 1,
@StudentID int out
INSERT INTO Student (FirstName, LastName, PredictedGrade, ActionPlan, StudentActive)
VALUES (@FirstName, @LastName, @PredictedGrade, @ActionPlan, @StudentActive)
SET @StudentID = SCOPE_IDENTITY()
Добавление нескольких строк в таблицу StudentClass:
(@StudentClassCollection As InsertStudentClass READONLY)
INSERT INTO StudentClass(StudentID, ClassID)
SELECT StudentID, ClassID FROM @StudentClassCollection
Итак, оба эти варианта работают, но я не знаю, как это сделать, чтобы в случае сбоя одного из них выполнение не выполнялось и изменения не фиксировались? Так эффективно ли мне нужно выполнять оба действия одно за другим в одной и той же хранимой процедуре? Я думаю! Как я уже сказал, я новичок, поэтому, если я сделал что-то не так, пожалуйста, дайте мне знать, я исправлю это:)