删除后触发超过1个记录
当我删除所有记录时,存在问题。
CREATE OR ALTER TRIGGER update_StuIns_OnDelete
ON Class
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Instructor_ID TABLE (id BIGINT);
INSERT INTO @Instructor_ID
SELECT prevC.c_InstructorID
FROM deleted prevC
DECLARE @Institute_ID TABLE (id BIGINT);
INSERT INTO @Institute_ID
SELECT prevC.c_InstituteID
FROM deleted prevC
DECLARE @Instrument_ID TABLE (id BIGINT);
INSERT INTO @Instrument_ID
SELECT prevC.c_InstrumentID
FROM deleted prevC
DECLARE @Student_Id TABLE (id BIGINT);
INSERT INTO @Student_Id
SELECT prevC.c_StudentID
FROM deleted prevC
IF ((SELECT Learning_Time FROM Is_Learning
WHERE l_StudentID IN (SELECT id FROM @Student_Id)
AND l_InstrumentID IN (SELECT id FROM @Instrument_ID)) IS NULL)
BEGIN
DELETE Is_Learning
WHERE l_StudentID IN (SELECT id FROM @Student_Id)
AND l_InstrumentID IN (SELECT id FROM @Instrument_ID)
END
IF((SELECT Teaching_Time FROM Teaches
WHERE t_InstructorID IN (SELECT id FROM @Instructor_ID)
AND t_InstrumentID IN (SELECT id FROM @Instrument_ID)) IS NULL)
BEGIN
DELETE Teaches
WHERE t_InstructorID IN (SELECT id FROM @Instructor_ID)
AND t_InstrumentID IN (SELECT id FROM @Instrument_ID)
END
IF(NOT EXISTS(SELECT * FROM Class C
WHERE C.c_InstructorID IN (SELECT id FROM @Instructor_ID)
AND C.c_InstituteID IN (SELECT id FROM @Institute_ID)))
BEGIN
DELETE Is_MemberOf
WHERE m_InstructorID IN (SELECT id FROM @Instructor_ID)
AND m_InstituteID IN (SELECT id FROM @Institute_ID)
END
END;
当我想删除1行时,它可以正常工作,但是对于多行,我会得到此错误:
msg 512,16级,状态1,过程update_stuins_ondelete,第13行
子查询返回超过1个值。当子查询跟随=,!=,<,< = ,,> =或当子查询用作表达式时。
对这个问题有任何建议吗?
There is a problem when I delete all records.
CREATE OR ALTER TRIGGER update_StuIns_OnDelete
ON Class
AFTER DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Instructor_ID TABLE (id BIGINT);
INSERT INTO @Instructor_ID
SELECT prevC.c_InstructorID
FROM deleted prevC
DECLARE @Institute_ID TABLE (id BIGINT);
INSERT INTO @Institute_ID
SELECT prevC.c_InstituteID
FROM deleted prevC
DECLARE @Instrument_ID TABLE (id BIGINT);
INSERT INTO @Instrument_ID
SELECT prevC.c_InstrumentID
FROM deleted prevC
DECLARE @Student_Id TABLE (id BIGINT);
INSERT INTO @Student_Id
SELECT prevC.c_StudentID
FROM deleted prevC
IF ((SELECT Learning_Time FROM Is_Learning
WHERE l_StudentID IN (SELECT id FROM @Student_Id)
AND l_InstrumentID IN (SELECT id FROM @Instrument_ID)) IS NULL)
BEGIN
DELETE Is_Learning
WHERE l_StudentID IN (SELECT id FROM @Student_Id)
AND l_InstrumentID IN (SELECT id FROM @Instrument_ID)
END
IF((SELECT Teaching_Time FROM Teaches
WHERE t_InstructorID IN (SELECT id FROM @Instructor_ID)
AND t_InstrumentID IN (SELECT id FROM @Instrument_ID)) IS NULL)
BEGIN
DELETE Teaches
WHERE t_InstructorID IN (SELECT id FROM @Instructor_ID)
AND t_InstrumentID IN (SELECT id FROM @Instrument_ID)
END
IF(NOT EXISTS(SELECT * FROM Class C
WHERE C.c_InstructorID IN (SELECT id FROM @Instructor_ID)
AND C.c_InstituteID IN (SELECT id FROM @Institute_ID)))
BEGIN
DELETE Is_MemberOf
WHERE m_InstructorID IN (SELECT id FROM @Instructor_ID)
AND m_InstituteID IN (SELECT id FROM @Institute_ID)
END
END;
When I want to delete 1 row, it works correctly, but for multiple rows, I get this error:
Msg 512, Level 16, State 1, Procedure update_StuIns_OnDelete, Line 13
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Any suggestion for this problem?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果逻辑中的语句语句,则有三个
。
if(((选择...为null)
,另一个if(((选择...为null
),if(不存在...)<(不存在...)< /code>
在前两个情况下,您正在比较
选择
语句(返回一组行)与null
。您无法将整列与 > NULL 。<代码
You have three
if
statements in your logic.if ((select ... is null)
, anotherif ((select ... is null
, and anif (not exists ...)
In the first two cases, you are comparing the result of a
select
statement (which returns a set of rows) againstnull
. But null is a single scalar. You can't compare a whole column againstnull
.Change those two to match the
not exists
construction of the thirdif
.这起作用了。
This worked correctly.