根据另一个中的行数将多行插入表中

时间:2019-04-09 00:33:01

标签: sql sql-server sql-insert

我试图根据相关班级的学生人数,将行插入到Attendance_Check表中。对于班上的每个学生,他们的出勤检查表中应有一行。

相关表格包括:出勤记录,Att_Check,学生和班级

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相关的出勤ID和属于班级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 :(得分:0)

在大多数情况下,不建议从带有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;

也不需要将数字文字括在单引号中。