Вставка нескольких строк в таблицу на основе количества строк в другой - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь вставить строки в таблицу Attendance_Check на основе количества учеников в связанном классе.Для каждого учащегося в классе у него должна быть строка в таблице Participance_check.

Соответствующие таблицы включают: Attendance_Record, Att_Check, Student и Class

declare @i int;

/* 1. Create a new Record for specified class and date*/

INSERT INTO Attendance_Record (Class_ID, Att_Date)
VALUES('1', GETDATE()); /* insert class_ID for the class the teacher is recording attendance for)*/

SELECT @i= SCOPE_IDENTITY();

INSERT INTO Att_Check (Att_ID, Stu_ID)
VALUES((SELECT @i), (SELECT S.Stu_ID
        FROM Student S
            INNER JOIN Class C
                ON S.Class_ID=C.Class_ID
        WHERE C.Class_ID='1'))

Этот код пытается заполнитьв таблицах посещаемости с идентификатором посещаемости, который соответствует классу 1, и учащимися, принадлежащими к классу 1.

В настоящее время это только дает мне ошибку, что подзапрос вернул более одного значения.Я понимаю, почему это так, но мне трудно думать о том, как переписать код, чтобы обойти его.Я бы хотел, чтобы результаты заканчивались так:

Attendance Record Table
Att_ID | Class_ID | Date
1          1         10/10/2019


Attendance Check Table
Att_ID| Stu_ID | Stu_Status
1        1
1        2   
1        3

1 Ответ

0 голосов
/ 09 апреля 2019

Вставка из запроса с предложением VALUES в большинстве случаев не рекомендуется. Используйте вместо INSERT ... SELECT.

INSERT INTO att_check
           (att_id,
            stu_id)
           SELECT @i,
                  s.stu_id
           FROM student s
                INNER JOIN class c
                           ON s.class_id = c.class_id
           WHERE c.class_id = 1;

Нет необходимости заключать числовые литералы в одинарные кавычки.

...