[英]How to handle insert triggers for multi-row inserts in SQL Server?
我有以下触发器:
CREATE TRIGGER trigger_insert_student_table ON student_table
FOR INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @insertedStudentName VARCHAR(256);
DECLARE @insertedMajor VARCHAR(256);
DECLARE @insertedGrade VARCHAR(256);
SET @insertedStudentName = (SELECT STUDENT_NAME FROM inserted);
SET @insertedMajor = (SELECT MAJOR FROM inserted);
SET @insertedGrade = (SELECT GRADE FROM inserted);
IF (@insertedMajor='Economics' AND @insertedGrade = 'A')
BEGIN
/* DO SOME ACTION*/
END
ELSE IF(@insertedMajor='History' AND @insertedGrade = 'A')
BEGIN
/* DO SOME ACTION*/
END
END
它适合单次插入,但是当我执行多行插入时,它失败并显示以下错误:
子查询返回的值超过1。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
如何遍历每个插入的行并处理操作?
不要迭代。 一旦发现自己在SQL中说“如何进行迭代”,就错了。 不要将这些值设置为变量,而应考虑基于集合的操作。 按照“插入位置。主要='历史'和插入位置。等级='A”的思路思考。
我不知道您要在此处执行的“某些操作”是什么,但这是一个简单的示例:
update t
set UpdateDate = getdate(),
isStarEconomicsStudent = 1
from somePresentationTable a
inner join inserted i
on a.StudentID = i.StudentID
and i.Major = 'Economics'
and i.Grade = 'A'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.